`
keren
  • 浏览: 1586811 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex 自定义加载进度条

    博客分类:
  • Flex
阅读更多
Flex 自定义加载进度条
转:http://a168.blogbus.com/logs/28718649.html

使用方法:
设置Application标签的preloader为 MyComponent.MyDownloadProgressBar
<mx:Application preloader="MyComponent.MyDownloadProgressBar" >

下面是MyDownloadProgressBar.as的代码:

package MyComponent
{
import flash.display.*;
import flash.events.*;
import flash.filters.BitmapFilterQuality;
import flash.filters.BlurFilter;
import flash.geom.Matrix;
import flash.net.*;
import flash.text.TextField;
import flash.utils.*;
import flash.system.Capabilities;

import mx.events.*;
import mx.preloaders.*;
   
    public class MyDownloadProgressBar extends Sprite implements IPreloaderDisplay
    {       
        [Embed(source="logo.png", mimeType="application/octet-stream")]
  public var _loadingLogo:Class;
 
        private var dpbImageControl:Loader;
        private var _barSprite:Sprite;
        private var progressText:TextField;       
        private var ProgressBarSpritIsAdded:Boolean = false;
   
        public function MyDownloadProgressBar() {  
            super();                           
        }
       
        // Specify the event listeners.
        public function set preloader(preloader:Sprite):void {
            //Listen for 正在下载
            preloader.addEventListener(ProgressEvent.PROGRESS, handleProgress);
            //Listen for 下载完成
            preloader.addEventListener(Event.COMPLETE, handleComplete);
      //Listen for 正在初始化
            preloader.addEventListener(FlexEvent.INIT_PROGRESS, handleInitProgress);
            //Listen for 初始化完成
            preloader.addEventListener(FlexEvent.INIT_COMPLETE, handleInitComplete);
        }
       
        // Initialize the Loader control in the override
        // of IPreloaderDisplay.initialize().
        public function initialize():void {
         //添加logo图
            dpbImageControl = new Loader();      
            dpbImageControl.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler);
            dpbImageControl.loadBytes(new _loadingLogo() as ByteArray);
            //dpbImageControl.load(new URLRequest("loadinglogo.swf"));
        }


        // After the SWF file loads, set the size of the Loader control.
        private function loader_completeHandler(event:Event):void
        {        
         addChild(dpbImageControl);
         dpbImageControl.width = 230;
            dpbImageControl.height= 80;
            dpbImageControl.x = this.stage.stageWidth/2 - dpbImageControl.width/2;
            dpbImageControl.y = this.stage.stageHeight/2 - dpbImageControl.height/2 - 80;
        }  
       
        //
        private function addProgressBarSprit():void{
         //绘制背景渐变
   var matrix:Matrix=new Matrix();
         matrix.createGradientBox(this.stage.stageWidth,this.stage.stageHeight,Math.PI/2);
         var colors:Array=[0x058BBD,0xFFFFFF];
         var alphas:Array=[1,1];
         var ratios:Array=[0,255];
         this.graphics.lineStyle();
         this.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,matrix);       
         this.graphics.drawRect(0,0,this.stage.stageWidth,this.stage.stageHeight);
         this.graphics.endFill();
        
         //绘制中心白色发光
            var _Sprite1:Sprite = new Sprite();
   addChild(_Sprite1);
   _Sprite1.graphics.beginFill(0xffffff,0.45);
            _Sprite1.graphics.drawEllipse(this.stage.stageWidth/2-130, this.stage.stageHeight/2-90, 280, 100);
            _Sprite1.graphics.endFill();
            //滤镜实现发光边缘柔和           
            var blur:BlurFilter = new BlurFilter();
   blur.blurX = 100;
   blur.blurY = 50;
   blur.quality = BitmapFilterQuality.HIGH;
   _Sprite1.filters = [blur];
  
   //-------------------------------------------------
  
   //绘制进度条背景
   var _Sprite2:Sprite = new Sprite();
   addChild(_Sprite2);
   _Sprite2.graphics.lineStyle(1, 0xCCCCCC);
   _Sprite2.graphics.beginFill(0xFFFFFF);
   _Sprite2.graphics.drawRect((this.stage.stageWidth/2 - 152), (this.stage.stageHeight/2 - 10), 304, 20);  
   _Sprite2.graphics.endFill();
  
   //-------------------------------------------------
  
   //加载进度条Sprite
   _barSprite = new Sprite();
   addChild(_barSprite);
   _barSprite.x = this.stage.stageWidth/2 - 150;
   _barSprite.y = this.stage.stageHeight/2 - 8;
  
   //-------------------------------------------------
  
   //加载进度条文字
   progressText = new TextField();
   addChild(progressText);
   progressText.textColor = 0x333333;
            progressText.width = 300;
            progressText.height = 18;
            progressText.x = this.stage.stageWidth/2 - 152;
            progressText.y = this.stage.stageHeight/2 + 20;
        }
       
        //刷新进度条
        private function drawProgressBar(bytesLoaded:Number, bytesTotal:Number):void
  {  
   if (_barSprite != null && progressText != null){
    var g:Graphics = _barSprite.graphics;
    g.clear();
//    g.beginFill(0xCCCCCC);
//    g.drawRect(0, 0, 300*(bytesLoaded/bytesTotal),16);  
//    g.endFill();   
   
    var matrix:Matrix=new Matrix();
          matrix.createGradientBox(300*(bytesLoaded/bytesTotal),16,Math.PI/2);
          var colors:Array=[0x0099CC,0x99cc77];
          var alphas:Array=[1,1];
          var ratios:Array=[0,255];
          g.lineStyle();
          g.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,matrix);       
          g.drawRect(0,0,300*(bytesLoaded/bytesTotal),16);
          g.endFill(); 
   
   
   }
  }
       
        //正在下载的进度
        private function handleProgress(event:ProgressEvent):void {
         //第一次处理时绘制进度条Sprit
         if (ProgressBarSpritIsAdded == false){
          ProgressBarSpritIsAdded = true;
          addProgressBarSprit();
         }
        
         if (progressText != null){
          progressText.text = "下载进度:已下载 " + event.bytesLoaded + " byte,总大小 " + event.bytesTotal + " byte.";
         }        
         drawProgressBar(event.bytesLoaded, event.bytesTotal);
        }
       
        private function handleComplete(event:Event):void {
         if (progressText != null){
          progressText.text = "下载完成.";
         }
         drawProgressBar(1,1);       
        }
       
        private function handleInitProgress(event:Event):void {
         if (progressText != null){
          progressText.text = "正在初始化...";
         }
         drawProgressBar(1,1);
        }
       
        private function handleInitComplete(event:Event):void {
         if (progressText != null){
          progressText.text = "初始化完成.";
         }
         drawProgressBar(1,1);        
        
         //0.03秒后抛出完成事件
            var timer:Timer = new Timer(300,1);
            timer.addEventListener(TimerEvent.TIMER, dispatchComplete);
            timer.start();     
        }
   
        private function dispatchComplete(event:TimerEvent):void {
            dispatchEvent(new Event(Event.COMPLETE));
        }
       

        // Implement IPreloaderDisplay interface
   
        public function get backgroundColor():uint {
            return 0;
        }
       
        public function set backgroundColor(value:uint):void {
        }
       
        public function get backgroundAlpha():Number {
            return 0;
        }
       
        public function set backgroundAlpha(value:Number):void {
        }
       
        public function get backgroundImage():Object {
            return undefined;
        }
       
        public function set backgroundImage(value:Object):void {
        }
       
        public function get backgroundSize():String {
            return "";
        }
       
        public function set backgroundSize(value:String):void {
        }
   
        public function get stageWidth():Number {
            return 500;
        }
       
        public function set stageWidth(value:Number):void {
        }
       
        public function get stageHeight():Number {
            return 375;
        }
       
        public function set stageHeight(value:Number):void {
        }
    }

}


分享到:
评论
2 楼 Ben.Sin 2012-06-30  
good job
1 楼 zzz_robinson 2012-03-22  
谢啦。很不错,拿过来用用了

相关推荐

    flex 自定义加载进度框

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

    flex可自定义圆形加载进度条例子代码下载

    在这个特定的案例中,我们关注的是使用Flex实现的自定义圆形加载进度条。 在Web应用中,进度条是用户界面中常见的一种元素,用于指示某个任务或数据加载的进度。圆形进度条与传统的水平进度条不同,它以圆形图案...

    Flex3自定义的加载进度条

    在Flex3中,有时候我们需要自定义加载进度条来满足特定的界面设计或用户体验需求。下面将详细讲解如何在Flex3中实现自定义的加载进度条。 1. **自定义组件基础** 在Flex3中,我们可以创建自定义组件来扩展或替换...

    Flex自定义加载条(小起)

    在本文中,我们将深入探讨如何在Flex环境中自定义加载条,即进度条组件。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它提供了丰富的UI组件库,其中包括标准的进度条组件,但有时...

    flex自定义加载器

    本文将深入探讨Flex自定义加载器的相关知识点,帮助你理解和掌握如何在Flex项目中实现这一功能。 1. **Loader类** Loader类是AS3中的核心类,位于`flash.display`包下,用于加载和显示各种类型的媒体资源。通过...

    Flex 4 进度条的皮肤

    进度条是用户界面中常见的组件,用于表示任务的完成程度或加载状态。本文将深入探讨如何在Flex 4中创建和定制进度条的皮肤。 首先,我们需要了解Flex 4中的皮肤架构。Flex 4引入了Spark组件模型,其中皮肤是组件...

    Flex进度条小例子

    在Flex中,我们可以创建自定义的用户界面组件,其中包括进度条,用于显示任务的完成进度或数据加载状态。 描述部分虽然为空,但根据标签“源码”和“工具”,我们可以推测这篇博文可能提供了关于如何使用Flex来创建...

    Flex 预加载动画demo

    这个"Flex 预加载动画demo"是Flex应用中的一个实例,它展示了如何自定义预加载进度条动画,使得用户在等待应用程序加载时能有一个更友好的交互体验。 预加载是任何富媒体应用程序的关键部分,因为它确保了所有必要...

    用as3写的加载进度条

    本教程将详细解释如何使用AS3来创建一个自定义的加载进度条,并涉及到动态画图以及界面初始化的相关知识。 1. **AS3基础** AS3是Flash Professional、Flex Builder等开发工具中的编程语言,广泛用于创建富互联网...

    flex自定义截取图片上传

    本项目“flex自定义截取图片上传”就是这样一个解决方案,它采用Adobe Flex技术实现,结合C#后端处理,为用户提供了一套完整的截图上传系统。以下是关于这个项目的详细知识点: 1. **Flex技术**:Flex是Adobe公司...

    flex 异步加载tree

    AsyncTree是Flex中的一个自定义组件,它允许开发者构建能够异步加载数据的树形结构。这通常用于展示大量数据或者需要动态加载子节点的情况。通过这种方式,可以显著提高应用的性能和用户体验。 ### 二、代码解析 #...

    结合flash制作的flex进度条

    在Flex中,进度条组件通常用于显示应用程序执行的某个任务的进度,如数据加载、文件上传或计算过程。Flex标准库中包含了多种进度条组件,如HProgressBar(水平进度条)和VProgressBar(垂直进度条),这些组件可以...

    Flex进度条示例源码

    Flex允许自定义组件样式,包括进度条的颜色、宽度、高度等。这可以通过CSS或直接在MXML中设置属性完成。例如: ```xml ``` 这里的`trackColor`和`barColor`分别设置了轨道和填充条的颜色。 **5. 使用压缩包中的...

    flex3自定义DownloadProgressBar

    标题“flex3自定义DownloadProgressBar”指的是在Adobe Flex 3框架中创建一个定制的下载进度条组件。Flex 3是一个开源的开发工具,用于构建富互联网应用程序(RIA),它使用MXML和ActionScript 3语言编写。下载...

    Flex 扇形Loading

    Flex扇形Loading是一种在Flex应用中实现的自定义加载指示器,它提供了更加美观和动态的用户体验,替代了默认的加载动画。这种加载效果通常采用扇形或环形的进度条设计,使得用户能够直观地看到加载过程的进度。本文...

    flex初始化页面修改,preloader

    在默认情况下,Flex的预加载器是一个简单的白色背景上带有Adobe Flex标志的进度条。然而,为了提升用户体验和品牌一致性,开发者常常需要自定义这个预加载器,使其更加个性化。 首先,我们来理解一下`flex初始化...

    Flex世界堪称最经典作品加说明

    此外,还设置了背景颜色和自定义加载进度条(“preloader”),这些都展示了Flex的自定义和灵活性。 在组件和类的导入部分,我们可以看到Flex与Esri的ArcGIS Flex API的集成,这表明这个应用可能是一个地理信息系统...

    as 3.0 进度条(附带源码)

    在本文中,我们将深入探讨如何在ActionScript 3.0中创建一个自定义的进度条组件,这与提供的"as 3.0 进度条(附带源码)"资源紧密相关。ActionScript 3.0是Adobe Flash Professional中的编程语言,用于创建交互式富...

    Flex4_ProgressBar_Combobox_NumericStepper

    在Flex4中,ProgressBar组件通过图形化的方式展示数据加载、任务执行等操作的进度。它支持两种模式:确定性(determinate)和不确定性(indeterminate)。确定性进度条显示实际的进度百分比,而不确定性进度条通常...

    FLex loading源码

    4. **组件自定义**:`com`文件夹中的类可能包含了自定义的加载组件,比如自定义的进度条或加载动画。这些类可能会扩展Flex的基础组件,如`mx.controls.ProgressBar`,并添加特定的功能或样式。 5. **FLA与SWF**:未...

Global site tag (gtag.js) - Google Analytics