Flex 4.6 下載進度條 IPreLoaderDisplay生命週期

Flex4.6 程序的主類實際上爲SystemManager的子類。SystemManager會創建Preloader對象,然後調用PreLoader對象的initialize方法,該方法有如下簽名

 public function initialize(showDisplay:Boolean, 
                               displayClassName:Class,
                               backgroundColor:uint,
                               backgroundAlpha:Number,
                               backgroundImage:Object,
                               backgroundSize:String,
                               displayWidth:Number,
                               displayHeight:Number,
                               libs:Array = null,
                               sizes:Array = null,
                               rslList:Array = null,
                               resourceModuleURLs:Array = null,
                               applicationDomain:ApplicationDomain = null):void

showDisplay會傳入 Application.usePreloader屬性,displayClassName會傳入Application.preloader屬性(從類名字符串得到的Class對象),backgroundXXX屬性對應於Application的backgroundXXX屬性,displayWidth和displayHeight會傳入舞臺大小。

Preloader.initialize方法片段如下

if (showDisplay)
{
            displayClass = new displayClassName(); 
            // Listen for when the displayClass no longer needs to be on the stage
            displayClass.addEventListener(Event.COMPLETE,
                                          displayClassCompleteHandler);
            
            // Add the display class as a child of the Preloader
            addChild(DisplayObject(displayClass));
                        
            displayClass.backgroundColor = backgroundColor;
            displayClass.backgroundAlpha = backgroundAlpha;
            displayClass.backgroundImage = backgroundImage;
            displayClass.backgroundSize = backgroundSize;
            displayClass.stageWidth = displayWidth;
            displayClass.stageHeight = displayHeight;
            displayClass.initialize();  
            displayClass.preloader = this;
            ………………
 }

如果Application.usePreloader==true,則會創建下載進度條,一個實現了IPreloaderDisplay接口的實例(且爲DisplayObject子類實例,是一個顯示對象),然後設置backgroundXXX,stageWidth和stageHeight,調用進度條實例的initialize方法,設置preloader屬性,把Preloader本身傳入進度條實例。

一般在設置preloader屬性時,會偵聽Preloader實例的7個事件,如SparkDownloadProgressBar所示

public function set preloader(value:Sprite):void
{
    _preloader = value;
   
    value.addEventListener(ProgressEvent.PROGRESS, progressHandler);    
    value.addEventListener(Event.COMPLETE, completeHandler);
        
    value.addEventListener(RSLEvent.RSL_PROGRESS, rslProgressHandler);
    value.addEventListener(RSLEvent.RSL_COMPLETE, rslCompleteHandler);
    value.addEventListener(RSLEvent.RSL_ERROR, rslErrorHandler);
        
    value.addEventListener(FlexEvent.INIT_PROGRESS, initProgressHandler);
    value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteHandler);
}


ProgressEvent.PROGRESS事件反應程序的下載進度,Event.COMPLETE事件在程序下載完成時調度,RSLEvent是加載運行時共享庫的相關事件。FlexEvent.INIT_PROGRESS在程序下載完成開始初始化時調度 在Preloader調度FlexEvent.INIT_COMPLETE事件時,代表着Application已經下載完成並已經初始化完畢,這時需要下載進度條IPreloaderDisplay實例調度一個Event.COMPLETE事件來通知Preloader刪除進度條,顯示Application


所以在自定義Flex 4.6程序下載進度條時,需要先定義一個實現了IPreloaderDisplay接口的Sprite類。處理preloader的7個事件,在ProgressEvent.PROGRESS事件調度是改變進度條的外表顯示,在FlexEvent.INIT_COMPLETE調度之後,可以做一些額外處理,如播放動畫或聲音,最後不要忘記,IPreloaderDisplay進度條對象必須調度一個Event.COMPLETE事件,通知Preloader移除進度條,顯示Application。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章