2012-12-18 5 views
0

안녕하세요 미리보기 이미지를 클릭 할 때 이미지를 추가하려고합니다. 리스너 (Event.COMPLETE?)를 사용해야한다는 것을 알고 있지만, 태블릿을 회전하면 이미지의 크기가 올바르게 조정되지 않습니다.동작 스크립트를 통해 이미지의 크기를 올바르게 조정할 수 없습니다.

이미지가 아직로드되지 않았으므로 addImage1() 함수 내에서 이미지의 크기를 조정할 수 없지만 리스너 함수 내에서 newImg.width를 사용하여 이미지 너비를 재설정 할 수 없다고 생각합니다.

모든 도움을 주시면 감사하겠습니다.

<?xml version="1.0" encoding="utf-8"?> 
    <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="ZOOM Pictues with Tap" 
    resize="view1_resizeHandler(event)"> 

<s:layout> 
     <s:VerticalLayout/> 
    </s:layout> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
    <![CDATA[ 

    import mx.events.FlexEvent; 
    import mx.events.ResizeEvent; 

    public var hasImageBeenAdded:Boolean = false; 
    private var imageLastWidth:Number; 
    private var imageLastHeight:Number; 
    private var zoomFactor:Number; 
    private var imageNumber:Number; 

    private var rhsKeepWidth:int; 
    private var rhsKeepHeight:int; 
    private var rhsKeep:Boolean = false; 

    protected function view1_resizeHandler(event:ResizeEvent):void 
    { 

     if(rhsKeepWidth > rhsKeepHeight) // Was Landscape is now Portrait 
     { 
     var tmpWidth2:int = rhsKeepWidth; 
     var tmpHeight2:int = rhsKeepHeight; 
     rhsKeepWidth = tmpHeight2-lhs.width; 
     rhsKeepHeight = tmpWidth2+lhs.width;     
     } 
     else //Was Portrait is now Landscape 
     { 
     var tmpWidth1:int = rhsKeepWidth; 
     var tmpHeight1:int = rhsKeepHeight; 
     rhsKeepWidth = tmpHeight1-lhs.width; 
     rhsKeepHeight = tmpWidth1+lhs.width; 
     } 
     addImage1(); 
    } 

    protected function removeAllImages():void 
    {  
     var totalElements : int = rhs.numElements; 
     for(var i:int=totalElements-1;i>=0;i--) 
     { 
     rhs.removeElementAt(i); 
     } 
    } 

    private function onImageLoaded(e:Event):void 
    { 
     var zoomFactor1:Number; 
     var zoomFactor2:Number; 

     imageLastWidth = e.target.sourceWidth; 
     imageLastHeight = e.target.sourceHeight; 

     if(rhsKeep != true) //Need to set the rhs VGroup dimensions 
     { 
     rhs.width = hGroup1.width-lhs.width; 
     rhs.height = hGroup1.height; 
     rhsKeep = true; 
     rhsKeepWidth = rhs.width; 
     rhsKeepHeight = rhs.height; 
     } 

     zoomFactor1 = rhsKeepWidth/imageLastWidth; 
     zoomFactor2 = rhsKeepHeight/imageLastHeight; 

     if(zoomFactor1 < zoomFactor2) 
     { 
     zoomFactor = zoomFactor1; 
     } 
     else 
     { 
     zoomFactor = zoomFactor2; 
     } 
     trace("zoomFactor=" + zoomFactor); 
    } 

    public function addImage1():void 
    { 
     var i:int; 
     var newImg:Image = new Image(); 
     removeAllImages(); 
     newImg.source = "images/1.jpg"; 
     newImg.x = 0; 
     newImg.y = 0; 
     newImg.addEventListener(Event.COMPLETE,onImageLoaded); 
     rhs.addElementAt(newImg,0); 
     hasImageBeenAdded = true; 
     imageNumber = 1; 
     trace("Image Width= " + newImg.width); 
     newImg.scaleX = newImg.scaleY = zoomFactor; 
    } 

    ]]> 
    </fx:Script> 


    <s:HGroup id="hGroup1" width="100%" height="100%">  
     <s:Scroller id="scrollerL" height="100%"> 
     <s:VGroup id="lhs" width="15%" height="100%" gap="10" 
     horizontalAlign="center" verticalAlign="top"> 
      <s:Image width="100" height="100" source="thumbs/1.jpg" click="addImage1()"/> 
     </s:VGroup> 
     </s:Scroller> 

     <s:Scroller id="scroller1" height="100%" width="100%"> 
     <s:VGroup id="rhs" height="100%"> 
     </s:VGroup> 
     </s:Scroller> 
    </s:HGroup> 


    </s:View> 

답변

0

장치 방향에 대해서 :-) 코드는 다음, 당신은 사용해야합니다

trace(Stage.deviceOrientation); 
trace(Stage.orientation); 

그들은 읽기 전용 문자열이 장치의 화면의 방향에 관한 정보를 출력한다. 수동 무대의 방향을 설정할 수 있습니다 : 이미지 로딩에 관한

Stage.setOrientation(StageOrientation.DEFAULT); 

을, 당신은해서 Event.COMPLETE에 대한의 EventListener이 필요하고 당신은 또한 이미지와 컨텐츠를 캐스팅해야합니다

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(event:Event):void { 
    trace("Image loaded"); 
    // Handle code here 
    // Use: (loader.content as Image) 
}); 
loader.load(new URLRequest("images/1.jpg")); 
관련 문제