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。

你可能感兴趣的:(Flex,4,preloader,下载进度条)