2012-12-18 97 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的事件監聽,你也應該投的內容圖片:

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")); 
相關問題