2009-11-11 92 views
0

在我的flex應用程序中,有一個用於我正在使用的TileList的項目渲染器。 我在運行時將圖像加載到項目渲染器中。我正在使用下面的代碼來調整圖像的寬度和高度。但它似乎並沒有工作。 我調試了Flex應用程序,發現實際的寬度和高度值正在分配。但圖像從未看起來合適的尺寸。 這裏是我的代碼:動態圖像調整大小

private function Init() :void 
{ 
    tileImg = new Image(); 
    tileImg.source = data.ICON; 
    tileImg.toolTip = data.TITLE; 
    tileImg.buttonMode = true; 
    tileImg.addEventListener(Event.COMPLETE, AdjustImageDimensions); 
    this.addChild(tileImg); 
} 

private function AdjustImageDimensions(e:Event):void 
{ 
    tileImg.width = (e.currentTarget as Image).contentWidth; 
    tileImg.height = (e.currentTarget as Image).contentHeight; 
} 

回答

0

好吧,我有一個問題,就像這一天,我使用Loader類來修復它。您可以在文件加載後獲取信息。您還需要附加到加載器的事件偵聽器。你從哪裏獲得圖像?一個URL或文件系統?

下面是一個簡單的例子:

package 

{ 進口使用flash.display.Loader; import flash.events.Event; import flash.net.FileReference;

import mx.controls.Image; 

public class MyItemRenderer 
{ 
    private var fileRef:FileReference = new FileReference(); 
    private var myLoader:Loader = new Loader(); 
    public var myDynamicImage:Image; 

    public function MyItemRenderer() 
    { 
     fileRef.addEventListener(Event.SELECT, loadImageToCache); 
     fileRef.addEventListener(Event.COMPLETE, sendToLoader); 

     fileRef.browse(/* put file types in this array */); 
    } 

    private function loadImageToCache(e:Event):void 
    { 
     fileRef.load(); 
    } 

    private function sendToLoader(e:Event):void 
    { 
     myLoader.loadBytes(fileRef.data); 
     myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, createImage); 
    } 

    private function createImage(e:Event):void 
    { 
     var file:Loader = Loader(e.target); 

     myDynamicImage = new Image(); 
     myDynamicImage.source = file; 
     myDynamicImage.width = file.width; 
     myDynamicImage.height = file.height; 
    } 
    //now that would be great if you can control the width and height 
    //of these images at runtime, BUT, 
    //chances are if their dynamically loaded, you can't so here... 

    private function getImgAR(file:Loader):Number 
    { 
     return file.width/file.height; 
    } 

    //then use this createImage function instead... 

    /* 

    private function createImage(e:Event):void 
    { 
     var file:Loader = Loader(e.target); 
     myDynamicImage = new Image(); 
     myDynamicImage.source = file; 
     myDynamicImage.width = 120*getImgAR(file); //you can substitue 120 for your required size 
     myDynamicImage.height = 120;//same here 
    } 

    */ 
} 

}

希望幫助

1

在觸發事件completecontentWidthcontentHeight屬性的值不是最終。您可以在updateComplete事件觸發後獲取該值。

+0

是。這是我第一次嘗試。但是我從updateComplete階段得到的寬度和高度是零和零。 但是,當我嘗試使用完整的事件,我得到了真正的價值觀。 問題是圖像沒有被分配這些值。或者他們被分配,但圖像不會在視覺上調整大小。 – CodeQrius 2009-11-11 17:27:04