+展开
-ActionScript
package oreilly.cookbook {
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.geom.Rectangle;
import mx.preloaders.DownloadProgressBar;
public class DPBSubclass extends DownloadProgressBar{
public function DPBSubclass(){
super();
// 下载完成后最短的显示时间
MINIMUM_DISPLAY_TIME = 3000;
// 设置初始化进程中的默认文本。
initializingLabel = "Download complete!/nInitializing...";
// 重载标签域以显示自定义文本
override protected function get labelRect():Rectangle{
return new Rectangle(14, 5, 150, 30);
}
// 重载下载进度处理器以显示自定义文本。
override protected function progressHandler(event:ProgressEvent ):void{
super.progressHandler(event);
label = Math.round(event.bytesLoaded / 1000 ).toString()+ "k of "+ Math.round( event.bytesTotal / 1000).toString() + "k";
}
// 重载以确保在初始化和下载时显示进度条。
override protected function showDisplayForInit(elapsedTime:int,count:int):Boolean{return true;}
override protected function showDisplayForDownloading( elapsedTime:int,event:ProgressEvent):Boolean{ return true; }
}
}
+展开
-ActionScript
package oreilly.cookbook {
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.Timer;
import mx.events.FlexEvent;
import mx.preloaders.IPreloaderDisplay;
import mx.preloaders.Preloader;
public class CustomProgress extends Sprite implements IPreloaderDisplay{
private var _bgAlpha:Number;
private var _bgColor:uint;
private var _bgImage:Object;
private var _bgSize:String;
private var _stageHeight:Number;
private var _stageWidth:Number;
private var _preloader:Preloader;
private var _downloadBar:Shape;
private var _initBar:Shape;
private var _initField:TextField;
public function CustomProgress() {
_initField = new TextField();
_initField.defaultTextFormat = new TextFormat( 'Arial', 12, 0xFFFFFF, true);
_downloadBar = new Shape();
addChild( _downloadBar );
_initBar = new Shape();
addChild( _initBar );
}
// 初始化待显示的任何属性。
public function initialize():void {
_downloadBar.x = ( _stageWidth / 2 ) - 20;
_initBar.x = _downloadBar.x - 2;
_downloadBar.y = ( _stageHeight / 2 ) - 50;
_initBar.y = _downloadBar.y;
_initField.x = _initBar.x + 2;
_initField.y = _initBar.y + 100 - 15;
}
// 为Preloader实例定义事件处理器。
public function set preloader( obj:Sprite ):void {
_preloader = obj as Preloader;
_preloader.addEventListener( ProgressEvent.PROGRESS,downloadProgressHandler );
_preloader.addEventListener( FlexEvent.INIT_PROGRESS,initProgressHandler );
_preloader.addEventListener( FlexEvent.INIT_COMPLETE,initCompleteHandler );
}
public function get backgroundAlpha():Number { return _bgAlpha; }
public function set backgroundAlpha(value:Number):void{_bgAlpha = value;}
public function get backgroundColor():uint{ return _bgColor;}
public function set backgroundColor(value:uint):void{_bgColor = value;}
public function get backgroundImage():Object{return _bgImage;}
public function set backgroundImage(value:Object):void{_bgImage = value;}
public function get backgroundSize():String{return _bgSize;}
public function set backgroundSize(value:String):void{_bgSize = value;}
public function get stageHeight():Number{return _stageHeight;}
public function set stageHeight(value:Number):void{_stageHeight = value;}
public function get stageWidth():Number{return _stageWidth;}
public function set stageWidth(value:Number):void{_stageWidth = value;}
// 处理SWF 文件下载过程。
private function downloadProgressHandler( evt:ProgressEvent):void{
var perc:Number = ( ( evt.bytesLoaded / evt.bytesTotal )* 100 );
var top:Number = 100 - perc;
_downloadBar.graphics.clear();
_downloadBar.graphics.beginFill( 0xFF0000, 1 );
_downloadBar.graphics.moveTo( 0, 0 );
_downloadBar.graphics.lineTo( 10, 0 );
_downloadBar.graphics.lineTo( 10, perc * 0.9 );
_downloadBar.graphics.lineTo( 0, perc * 0.9 );
_downloadBar.graphics.lineTo( 0, 0 );
_downloadBar.graphics.endFill();
_initBar.graphics.clear();
_initBar.graphics.beginFill( 0xFFFFFF, 1 );
_initBar.graphics.moveTo( 0, 100 );
_initBar.graphics.lineTo( 2, 100 );
_initBar.graphics.lineTo( 2, top );
_initBar.graphics.lineTo( 0, top );
_initBar.graphics.lineTo( 0, 100 );
_initBar.graphics.endFill();
}
// 处理程序初始化过程。
private function initProgressHandler( evt:FlexEvent ):void{
_initField.text = "initializing...";
addChild( _initField );
}
// 处理下载和初始化的完成。
private function initCompleteHandler( evt:FlexEvent ):void{
var timer:Timer = new Timer( 3000, 1 );
timer.addEventListener( TimerEvent.TIMER_COMPLETE,notifyOfComplete );
timer.start();
}
// 通报下载和初始化的完成。
private function notifyOfComplete( evt:TimerEvent ):void{
dispatchEvent( new Event( Event.COMPLETE ) );
}
}
}
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
preloader="oreilly.cookbook.CustomProgress">
<mx:Script>
<![CDATA[
// embed large audio file in order to see
// the preloader display.
[Embed(source="assets/audio/audio.mp3")]
private var _audio:Class;
]]>
</mx:Script>
</mx:Application>