簡體   English   中英

動作腳本:如何知道圖像的源屬性何時完全更新

[英]Actionscript: How Can I Know When The Source Property Of An Image Is Completely Updated

var I:Image=new Image();
I.source='C:\\Abc.png';
var H:int=I.height;

H始終為零!

我想這是因為圖像尚未完成從磁盤讀取png文件的操作。

我可以監視什么事件以知道其寬度和高度何時具有正確的值?

“完成”事件似乎僅適用於下載的圖像。 “渲染”事件發生在每個幀中。 (未記錄?)“ sourceChanged”,在源更改時立即發生,並且有相同的問題!

我看到什么事件可以讓我知道圖像的width和height屬性何時具有有效值? 還是有一些我不知道的I.source ='xxx.png'同步版本?

PS:是的,我知道我不應該在空中計划中使用“ C:\\”。 這只是出於說明目的,因此您不會建議我使用“ Complete”,當source指示的文件是本地文件時,它甚至似乎不會觸發。

首先,sourceChanged是用於綁定的事件。 每個Bindable屬性都有一個相似的屬性。

無論如何,根據本地文檔,加載本地文件時會觸發Complete。 我希望它能在本地文件上很快啟動,但是,我希望在加載文件與將該內容添加到父文件,定位文件和確定大小之間有一個延遲。 延遲就是為什么無法立即獲得高度和寬度的原因。

我可以看到幾種不同的方法。 首先,您需要查看Flex組件的生命周期,並覆蓋updateDisplayList(),以使您知道項目(我懷疑contentHolder)的大小。

第二個可能是重寫contentHeight或contentWidth,以使它們調度表示高度和寬度的Bindable事件。

第三,是重寫doScaleContent方法; 這似乎是設置contentHolder的高度和寬度的位置。

隨便你吧。 我不確定您的用例是什么; 因此無法詳細說明。

var I:Image=new Image();
I.addEventListener(Event.COMPLETE, imageIsLoaded);
I.source='C:\\Abc.png';

function imageIsLoaded(event:Event):void
{
    // ...
}

贏家是...“調整大小”。 圖像大小更改(從0,0開始)后立即觸發resize事件。 調整大小后立即發射,那么寬度和高度就會准確。

嘗試使用以下代碼

    protected function init():void
    {
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, displayImage);            
        loader.load(new URLRequest('http://timeister.com/image.png'));
        return;         
    }

    protected function displayImage(event:Event):void
    {
        var loader:Loader = (event.target as LoaderInfo).loader;
        myImage.data   = loader.content;
        myImage.width  = loader.width;
        myImage.height = loader.height;
        this.height    = myImage.height;
        this.width     = myImage.width;
        this.visible = true;
        return;         
    } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM