`

flex自定义preloader

    博客分类:
  • flex
阅读更多
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
		{

		}



	}
}

 

分享到:
评论

相关推荐

    flex 自定义加载进度框

    在“flex自定义加载进度条”的场景中,开发者可能想要替换Flex默认的Application预加载器,以提供更个性化的用户体验。自定义预加载器可以让开发者自由设计加载界面的外观和交互,例如改变颜色、形状或动画效果,...

    flex初始化页面修改,preloader

    在Flex应用程序开发中,用户首次启动应用时会看到一个加载屏幕,这个屏幕通常被称为预加载器(Preloader)。预加载器的主要目的是显示应用程序加载的进度,同时为用户提供一种视觉反馈,让他们知道程序正在准备运行...

    Flex高级组件详细介绍

    - **自定义Preloader**:创建自定义预加载器以增强用户体验。 - **自定义图表组件**:根据业务需求设计和实现定制化的图表组件。 - **高级皮肤专题**:深入探讨如何使用Flex Skin框架为组件创建自定义外观。 - **...

    flex控制桌面背景

    首先,`Preloader.as` 是一个常见的Flex组件,它负责在应用程序加载之前显示进度条,提高用户体验。在处理桌面背景这样的任务时,可能用到预加载器来确保所有必要的资源(如图片或皮肤)在改变桌面背景前已完全加载...

    FLEX企业应用开发实战.part1

     2.5.4 使用ActionScript创建自定义组件  2.6 异步调用  2.6.1 异步调用导致模型数据不一致  2.6.2 异步调用导致用户反复(误)操作  2.7 小结 第3章 Flex企业应用开发中的主要元素  3.1 企业应用的特点...

    FLEX企业应用开发实战.part2

     2.5.4 使用ActionScript创建自定义组件  2.6 异步调用  2.6.1 异步调用导致模型数据不一致  2.6.2 异步调用导致用户反复(误)操作  2.7 小结 第3章 Flex企业应用开发中的主要元素  3.1 企业应用的特点...

    Flex组件生命周期[收集].pdf

    Flex应用的根对象是SystemManager,这是一个Display Class,继承自flash.display.MovieClip,使得预加载器(Preloader)和应用程序(Application)可以在两个不同的帧中运行。SystemManager有一个...

    Flex企业应用开发实战源代码

    2.5.4 使用ActionScript创建自定义组件 62 2.6 异步调用 85 2.6.1 异步调用导致模型数据不一致 85 2.6.2 异步调用导致用户反复(误)操作 86 2.7 小结 87 第3章 Flex企业应用开发中的主要元素 88 3.1 企业应用...

    flex as资料

    压缩包中的文件名“simple_preloader_2307”可能是一个简单的预加载器(preloader)示例。在Flex应用中,预加载器是加载应用程序的主要组件,它在主应用程序完全加载之前显示进度,以提高用户体验。这个文件可能是用...

    Flex 图 片 显 示

    可以使用`Preloader`类或自定义的预加载策略来实现。 总结,Flex图片显示涉及了`Image`组件、动态加载、图片处理、优化策略等多个方面。通过深入理解这些知识点,开发者能够创建出功能丰富、性能优秀的Flex应用程序...

    BRUSHED-METAL-PRELOADER.rar_FlashMX/Flex源码_FlashMX_

    通过研究和修改这个“BRUSHED METAL PRELOADER”源码,开发者可以学习到如何创建自定义、交互式的预加载器,并将其应用于自己的Flash MX或Flex项目中,提升网站的用户体验。同时,这也是一个深入了解ActionScript...

    flex Custom loading example

    网上找了很多都不完整,上传一个工程给大家分享,采用子类加载swf或者gif的方式显示loading ,gif或者swf文件可以随意换成自己喜欢的。...压缩包内容:preloader和button两种方式显示loading fex3源码

Global site tag (gtag.js) - Google Analytics