flex自定义preloader

xiaoxiao2025-02-09  15

package cn.ishion.component { import flash.display.DisplayObject; import flash.display.Graphics; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.geom.Point; import flash.geom.Rectangle; import flash.net.URLRequest; import flash.text.TextField; import flash.utils.clearTimeout; import flash.utils.setTimeout; import mx.events.FlexEvent; import mx.preloaders.IPreloaderDisplay; public class ConstomPreloader extends Sprite implements IPreloaderDisplay { private var url:String="loader1.swf"; private var loadContent:Object;//加载的内容 private var swfLoader:Loader;//加载swf东西 private var hasLoad:Boolean=false; // private var preTxt:TextField; private var swfWidth:Number=800; private var swfHeight:Number=600; private var _pregressRect:Rectangle; private var progressSprite:Sprite; public function get pregressRect():Rectangle{ return new Rectangle(0,0,400,10); } public function ConstomPreloader() { super(); loadSWF(); } private function loadSWF():void { swfLoader=new Loader(); swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); swfLoader.load(new URLRequest(url)); } private function onComplete(event:Event):void { var loadInfo:LoaderInfo=event.target as LoaderInfo; this.loadContent=loadInfo.content; this.hasLoad=true; createChild() } private function createChild():void { this.loadContent.x=Object(this.stage.stageWidth / 2 - swfWidth / 2); this.loadContent.y=Object(this.stage.stageHeight / 2 - swfHeight / 2); this.addChild(this.loadContent as DisplayObject); //搞不明白,stage.width stage.stageWidth trace(this.stageWidth+"::"+this.stageHeight); trace(this.stage.stageWidth+":::"+this.stage.stageHeight); trace(this.stage.stageWidth+":::"+this.stage.stageHeight); trace(this.loadContent.stage.width+"ssss"+this.loadContent.stage.height); var contentPoint:Point=new Point; contentPoint.x=this.stage.stageWidth/2-this.swfWidth/2; contentPoint.y=this.stage.stageHeight/2-this.swfHeight/2; preTxt=new TextField(); preTxt.selectable=false; preTxt.x=contentPoint.x + 200; preTxt.y=contentPoint.y + 400; preTxt.text="正在加载中"; this.addChild(preTxt); this.progressSprite=new Sprite(); this.progressSprite.x=this.preTxt.x; this.progressSprite.y=this.preTxt.y+20; var gra:Graphics=this.progressSprite.graphics gra.beginFill(0x0000ff,1); gra.drawRect(this.pregressRect.x,this.pregressRect.y,this.pregressRect.width,this.pregressRect.height); gra.endFill(); this.addChild(this.progressSprite); } public function get backgroundAlpha():Number { return 0; } public function set backgroundAlpha(value:Number):void { } public function get backgroundColor():uint { return 0; } public function set backgroundColor(value:uint):void { } public function get backgroundImage():Object { return null; } public function set backgroundImage(value:Object):void { } public function get backgroundSize():String { return null; } public function set backgroundSize(value:String):void { } public function set preloader(obj:Sprite):void { //Listen for 正在下载 obj.addEventListener(ProgressEvent.PROGRESS, handleProgress); //Listen for 下载完成 obj.addEventListener(Event.COMPLETE, handleComplete); //Listen for 正在初始化 obj.addEventListener(FlexEvent.INIT_PROGRESS, handleInitProgress); //Listen for 初始化完成 obj.addEventListener(FlexEvent.INIT_COMPLETE, handleInitComplete); } protected function handleProgress(event:ProgressEvent):void { this.setProgress(event.bytesLoaded, event.bytesTotal); } protected function handleComplete(event:Event):void { if(this.hasLoad){ this.preTxt.text="应用程序加载完成"; } } protected function setProgress(completed:Number, total:Number):void { if (!isNaN(completed) && !isNaN(total) && completed >= 0 && total > 0) { var value:Number=Number(completed); var maximum:Number=Number(total); draw(value, maximum); } } private function draw(value:Number, maxnum:Number):void { if (this.hasLoad) { var currentLoad:Number=this.getPercentLoaded(value,maxnum); this.preTxt.text="当前加载" +currentLoad + "%"; var g:Graphics=this.progressSprite.graphics; g.beginFill(0xcc6699,1); g.drawRect(this.pregressRect.x,this.pregressRect.y+2,this.pregressRect.width*currentLoad/100,this.pregressRect.height-4); g.endFill(); } } protected function getPercentLoaded(loaded:Number, total:Number):Number { var perc:Number; if (loaded == 0 || total == 0 || isNaN(total) || isNaN(loaded)) return 0; else perc=100 * loaded / total; if (isNaN(perc) || perc <= 0) return 0; else if (perc > 99) return 99; else return Math.round(perc); } protected function handleInitProgress(event:FlexEvent):void { if(this.hasLoad){ this.preTxt.text="应用程序初始化"; } } protected function handleInitComplete(event:FlexEvent):void { this.preTxt.text="应用程序初始化完成,开始进入主见面" this.loadContent.addEventListener("framequit",clearLoad); this.loadContent.gotoAndPlay("complete"); // var id:int=setTimeout(clearLoad,2000,id); } private function clearLoad(event:Event):void{ this.loadContent.removeEventListener("framequit",clearLoad); this.removeChild(this.progressSprite); this.removeChild(this.loadContent as DisplayObject); this.removeChild(this.preTxt); this.swfLoader.unload();//卸载资源 this.dispatchEvent(new Event(Event.COMPLETE)); } public function get stageHeight():Number { return 500; } public function set stageHeight(value:Number):void { } public function get stageWidth():Number { return 375; } public function set stageWidth(value:Number):void { } public function initialize():void { } } }

 

相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5024352.html

最新回复(0)