宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应

[Flex]flex做的加载进度条loading源代码实例

2016-10-13 00:16:48 点击量:14 标签: 收藏本文

[Flex]flex做的加载进度条loading源代码实例

  1. package com.iman.sps.sheet.ascript 
  2. { 
  3.     import flash.display.Sprite; 
  4.     import flash.display.*;  
  5.     import flash.events.*;  
  6.     import flash.filters.BitmapFilterQuality;  
  7.     import flash.filters.BlurFilter;  
  8.     import flash.geom.Matrix;  
  9.     import flash.net.*;  
  10.     import flash.text.TextField;  
  11.     import flash.utils.*;  
  12.     import flash.system.Capabilities;  
  13.      
  14.     import mx.events.*;  
  15.  
  16.     import mx.preloaders.IPreloaderDisplay; 
  17.      
  18.     public class MyProgressBar extends Sprite implements IPreloaderDisplay 
  19.     { 
  20.         [Embed(source="../image/logo.gif", mimeType="application/octet-stream")]  
  21.         public var _loadingLogo:Class;  
  22.          
  23.         private var dpbImageControl:Loader;  
  24.         private var _barSprite:Sprite;  
  25.         private var progressText:TextField;         
  26.         private var ProgressBarSpritIsAdded:Boolean = false;  
  27.  
  28.         public function MyProgressBar() 
  29.         { 
  30.             super(); 
  31.         } 
  32.          
  33.         // Specify the event listeners.  
  34.         public function set preloader(preloader:Sprite):void {  
  35.             //Listen for 正在下载  
  36.             preloader.addEventListener(ProgressEvent.PROGRESS, handleProgress);  
  37.             //Listen for 下载完成  
  38.             preloader.addEventListener(Event.COMPLETE, handleComplete);  
  39.             //Listen for 正在初始化  
  40.             preloader.addEventListener(FlexEvent.INIT_PROGRESS, handleInitProgress);  
  41.             //Listen for 初始化完成  
  42.             preloader.addEventListener(FlexEvent.INIT_COMPLETE, handleInitComplete);  
  43.         }  
  44.          
  45.         // Initialize the Loader control in the override  
  46.         // of IPreloaderDisplay.initialize().  
  47.         public function initialize():void {  
  48.             //添加logo图  
  49.             dpbImageControl = new Loader();        
  50.             dpbImageControl.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler);  
  51.             dpbImageControl.loadBytes(new _loadingLogo() as ByteArray);  
  52.             //dpbImageControl.load(new URLRequest("loadinglogo.swf"));  
  53.         }  
  54.          
  55.          
  56.         // After the SWF file loads, set the size of the Loader control.  
  57.         private function loader_completeHandler(event:Event):void  
  58.         {          
  59.             addChild(dpbImageControl);  
  60.             dpbImageControl.width = 136;  
  61.             dpbImageControl.height= 54;  
  62.             dpbImageControl.x = this.stage.stageWidth/2 - dpbImageControl.width/2;  
  63.             dpbImageControl.y = this.stage.stageHeight/2 - dpbImageControl.height/2 - 40;  
  64.         }    
  65.          
  66.         //  
  67.         private function addProgressBarSprit():void{  
  68.             //绘制背景渐变  
  69.             var matrix:Matrix=new Matrix();  
  70.             matrix.createGradientBox(this.stage.stageWidth,this.stage.stageHeight,Math.PI/2);  
  71.             var colors:Array=[0x3399ff,0xFFFFFF];  
  72.             var alphas:Array=[1,1];  
  73.             var ratios:Array=[0,255];  
  74.             this.graphics.lineStyle();  
  75.             this.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,matrix);         
  76.             this.graphics.drawRect(0,0,this.stage.stageWidth,this.stage.stageHeight);  
  77.             this.graphics.endFill();  
  78.              
  79.             //绘制中心白色发光  
  80.             var _Sprite1:Sprite = new Sprite();  
  81.             addChild(_Sprite1);  
  82.             _Sprite1.graphics.beginFill(0xffffff,0.45);  
  83.             _Sprite1.graphics.drawEllipse(this.stage.stageWidth/2-130, this.stage.stageHeight/2-90, 280, 100);  
  84.             _Sprite1.graphics.endFill();  
  85.             //滤镜实现发光边缘柔和             
  86.             var blur:BlurFilter = new BlurFilter();  
  87.             blur.blurX = 100;  
  88.             blur.blurY = 50;  
  89.             blur.quality = BitmapFilterQuality.HIGH;  
  90.             _Sprite1.filters = [blur];  
  91.              
  92.             //-------------------------------------------------  
  93.              
  94.             //绘制进度条背景  
  95.             var _Sprite2:Sprite = new Sprite();  
  96.             addChild(_Sprite2);  
  97.             _Sprite2.graphics.lineStyle(1, 0xCCCCCC);  
  98.             _Sprite2.graphics.beginFill(0xFFFFFF);  
  99.             _Sprite2.graphics.drawRect((this.stage.stageWidth/2 - 152), (this.stage.stageHeight/2 - 10), 304, 20);    
  100.             _Sprite2.graphics.endFill();  
  101.              
  102.             //-------------------------------------------------  
  103.              
  104.             //加载进度条Sprite  
  105.             _barSprite = new Sprite();  
  106.             addChild(_barSprite);  
  107.             _barSprite.x = this.stage.stageWidth/2 - 150;  
  108.             _barSprite.y = this.stage.stageHeight/2 - 8;  
  109.              
  110.             //-------------------------------------------------  
  111.              
  112.             //加载进度条文字  
  113.             progressText = new TextField();  
  114.             addChild(progressText);  
  115.             progressText.textColor = 0x333333;  
  116.             progressText.width = 300;  
  117.             progressText.height = 18;  
  118.             progressText.x = this.stage.stageWidth/2 - 152;  
  119.             progressText.y = this.stage.stageHeight/2 + 20;  
  120.         }  
  121.          
  122.         //刷新进度条  
  123.         private function drawProgressBar(bytesLoaded:Number, bytesTotal:Number):void  
  124.         {    
  125.             if (_barSprite != null && progressText != null){  
  126.                 var g:Graphics = _barSprite.graphics;  
  127.                 g.clear();  
  128.                 g.beginFill(0xCCCCCC);  
  129.                 g.drawRect(0, 0, 300*(bytesLoaded/bytesTotal),16);    
  130.                 g.endFill();     
  131.                  
  132.                 var matrix:Matrix=new Matrix();  
  133.                 matrix.createGradientBox(300*(bytesLoaded/bytesTotal),16,Math.PI/2);  
  134.                 var colors:Array=[0x0099CC,0x99cc77];  
  135.                 var alphas:Array=[1,1];  
  136.                 var ratios:Array=[0,255];  
  137.                 g.lineStyle();  
  138.                 g.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,matrix);         
  139.                 g.drawRect(0,0,300*(bytesLoaded/bytesTotal),16);  
  140.                 g.endFill();   
  141.                  
  142.                  
  143.             }  
  144.         }  
  145.          
  146.         //正在下载的进度  
  147.         private function handleProgress(event:ProgressEvent):void {  
  148.             //第一次处理时绘制进度条Sprit  
  149.             if (ProgressBarSpritIsAdded == false){  
  150.                 ProgressBarSpritIsAdded = true;  
  151.                 addProgressBarSprit();  
  152.             }  
  153.              
  154.             if (progressText != null){  
  155.                 progressText.text = "下载进度:已下载 " + event.bytesLoaded + " byte,总大小 " + event.bytesTotal + " byte.";  
  156.             }          
  157.             drawProgressBar(event.bytesLoaded, event.bytesTotal);  
  158.         }  
  159.          
  160.         private function handleComplete(event:Event):void {  
  161.             if (progressText != null){  
  162.                 progressText.text = "下载完成.";  
  163.             }  
  164.             drawProgressBar(1,1);         
  165.         }  
  166.          
  167.         private function handleInitProgress(event:Event):void {  
  168.             if (progressText != null){  
  169.                 progressText.text = "正在初始化...";  
  170.             }  
  171.             drawProgressBar(1,1);  
  172.         }  
  173.          
  174.         private function handleInitComplete(event:Event):void {  
  175.             if (progressText != null){  
  176.                 progressText.text = "初始化完成.";  
  177.             }  
  178.             drawProgressBar(1,1);          
  179.              
  180.             //0.03秒后抛出完成事件  
  181.             var timer:Timer = new Timer(300,1);  
  182.             timer.addEventListener(TimerEvent.TIMER, dispatchComplete);  
  183.             timer.start();       
  184.         }  
  185.          
  186.         private function dispatchComplete(event:TimerEvent):void {  
  187.             dispatchEvent(new Event(Event.COMPLETE));  
  188.         }  
  189.  
  190.          
  191.         public function get backgroundAlpha():Number 
  192.         { 
  193.             return 0; 
  194.         } 
  195.          
  196.         public function set backgroundAlpha(value:Number):void 
  197.         { 
  198.         } 
  199.          
  200.         public function get backgroundColor():uint 
  201.         { 
  202.             return 0; 
  203.         } 
  204.          
  205.         public function set backgroundColor(value:uint):void 
  206.         { 
  207.         } 
  208.          
  209.         public function get backgroundImage():Object 
  210.         { 
  211.             return null; 
  212.         } 
  213.          
  214.         public function set backgroundImage(value:Object):void 
  215.         { 
  216.         } 
  217.          
  218.         public function get backgroundSize():String 
  219.         { 
  220.             return null; 
  221.         } 
  222.          
  223.         public function set backgroundSize(value:String):void 
  224.         { 
  225.         } 
  226.          
  227.          
  228.          
  229.         public function get stageHeight():Number 
  230.         { 
  231.             return 0; 
  232.         } 
  233.          
  234.         public function set stageHeight(value:Number):void 
  235.         { 
  236.         } 
  237.          
  238.         public function get stageWidth():Number 
  239.         { 
  240.             return 0; 
  241.         } 
  242.          
  243.         public function set stageWidth(value:Number):void 
  244.         { 
  245.         } 
  246.     } 
  247. } 

使用方法:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.                xmlns:s="library://ns.adobe.com/flex/spark" 
  4.                 preloader="com.iman.sps.sheet.ascript.MyProgressBar">