flex默认的preloader已经很不错了,可是有时候还是需要自定义的.
 
需要在要出现自定义预加载的程序的<mx:Application>标签里加入preloader="".
preloader="com.lichen.component.CustomPreloader"
其中,com.lichen.component是我的包名,CustomPreloader这个类是继承了DownloadProgressBar
这句就是指明了程序preloader的时候加载哪个类
 
CustomPreloader.as
package com.lichen.component
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.ProgressEvent;
  import flash.text.TextField;
    
  import flashx.textLayout.BuildInfo;
    
  import mx.events.*;
  import mx.preloaders.DownloadProgressBar;
    
  public class CustomPreloader extends DownloadProgressBar {
    
    public var wcs:WelcomeScreen;
    public var msg:TextField;
    public function CustomPreloader()    
    {
      super();    
      msg=new TextField();
      wcs = new WelcomeScreen();
        
      this.addChild(wcs);
      this.addChild(msg);
    }
    
    override public function set preloader( preloader:Sprite ):void    
    {                                        
      preloader.addEventListener( ProgressEvent.PROGRESS , SWFDownloadProgress );        
      preloader.addEventListener( Event.COMPLETE , SWFDownloadComplete );
      preloader.addEventListener( FlexEvent.INIT_PROGRESS , FlexInitProgress );
      preloader.addEventListener( FlexEvent.INIT_COMPLETE , FlexInitComplete );
    }
    
    private function SWFDownloadProgress( event:ProgressEvent ):void {
      msg.text=String(int(event.bytesLoaded/event.bytesTotal*100))+" %";
      msg.background=true;
      msg.backgroundColor=0xD4E4FF;
      msg.width=200;
      msg.height=20;
      msg.textColor=0x444444;
    }
    
    private function SWFDownloadComplete( event:Event ):void {}
    
    private function FlexInitProgress( event:Event ):void {
//      wcs.ready = true;
      msg.text="完成了!";
      wcs.closeScreen();
      dispatchEvent(new Event(Event.COMPLETE));
    }
    
    private function FlexInitComplete( event:Event ):void    
    {            
//      wcs.ready = true;            
//      dispatchEvent( new Event( Event.COMPLETE ) );
    }
    
  }
}
 
这其中使用了WelcomeScreen,这个类的作用是使用图片,并且设置定时器控制图片显示的alpha属性.
WelcomeScreen.as
package com.lichen.component    
{        
  import flash.display.Loader;
  import flash.events.MouseEvent;
  import flash.events.TimerEvent;
  import flash.utils.ByteArray;
  import flash.utils.Timer;
    
  public class WelcomeScreen extends Loader
  {
    [ Embed(source="images/mt.jpg", mimeType="application/octet-stream") ]
    public var WelcomeScreenGraphic:Class;
    public var timer:Timer;
    private var fadeInRate:Number    = .05;
    private var fadeOutRate:Number = .08;
    private var timeAutoClose:int = 500;
    public var ready:Boolean = false;    
    
    public function WelcomeScreen()
    {
      this.visible = false;
      this.alpha = 0.5;
      timer = new Timer( 1 );
      timer.addEventListener( TimerEvent.TIMER, updateView );
      timer.start();
      this.loadBytes( new WelcomeScreenGraphic() as ByteArray );
      this.addEventListener( MouseEvent.MOUSE_DOWN, mouseDown );                            
    }
    
    public function updateView( event:TimerEvent ):void
    {
      if( this.alpha < 1)        this.alpha = this.alpha + this.fadeInRate;
      if( this.stage.stageWidth>0){
        this.stage.addChild(this);
        this.x = this.stage.stageWidth/2 - this.width/2;
        this.y = this.stage.stageHeight/2 - this.height/2;
        this.visible=true;
      }
      if( this.ready && timer.currentCount > this.timeAutoClose ) closeScreen()        
    }
    
    public function closeScreen():void
    {
      timer.removeEventListener( TimerEvent.TIMER, updateView );
      timer.removeEventListener( MouseEvent.MOUSE_DOWN, mouseDown);
      timer.addEventListener( TimerEvent.TIMER, closeScreenFade );                                        
    }
    
    public function closeScreenFade( event:TimerEvent ):void
    {
      if( this.alpha > 0){
        this.alpha = this.alpha - fadeOutRate;
      } else {
        timer.stop()
        this.parent.removeChild(this);
      }                
    }                
    
    public function mouseDown( event:MouseEvent ):void
    {
      closeScreen();                
    }
  }
}    
 
最终的效果图

flex自定义preloader预加载进度条的更多相关文章

  1. 网站顶部显示预加载进度条preload.js

    网站加载的速度快的话,不会显示进度条加载时候的样式. 支持性主流浏览器都支持,ie浏览器需要9以上9也支持. 使用方法 <script src="http://code.jquery. ...

  2. iOS 自定义任意形状加载进度条(水波纹进度条)

    1. 项目中要做类似下面的加载动画: 先给出安卓的实现方式 2.iOS的实现方式参考了下面两位的,感谢. 以任意底部图片为背景的加载动画 和 水波纹动画 最后附上自己的demo

  3. pace.js – 加载进度条插件

    这儿只是简单介绍一下这个插件pace.js. 在页面中引入Pace.js,页面就会自动监测你的请求(包括Ajax请求),在事件循环滞后,会在页面记录加载的状态以及进度情况.此插件的兼容性很好,可以兼容 ...

  4. 【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画

    之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特 ...

  5. iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26

    1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...

  6. pace.js – 网页自动加载进度条插件

    网站顶部的页面加载进度条是怎么实现的,页面的加载进度百分比,有时候获取是比较麻烦的,当然也可以利用一些优秀的JavaScript插件来实现,今天就为大家介绍这样子的一款插件:pace.js. [官方网 ...

  7. 【原生JS插件】LoadingBar页面顶部加载进度条

    先展示一下已经实现的效果: 预览地址:http://dtdxrk.github.io/js-plug/LoadingBar/index.html 看到手机上的浏览器内置了页面的加载进度条,想用在pc上 ...

  8. 《C/C++实现Console下的加载进度条模拟[美观版]》

    前言   有时候我们会遇到在CMD或DOS控制台上出现的加载进度条,虽然不是如网页和软件写的美观.但确确实实也有着自己的特色.而且,一个好看的加载进度条也能增加用户使用控制台程序的体验!所以,拿来研究 ...

  9. css3 linear-gradient实现页面加载进度条效果

    最终效果图: html结构: <div>    <p class="p1">        <span></span>    < ...

随机推荐

  1. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)

    2.连接相关 名称 类型 说明 Connection 指向一个数据库连接对象 Disconnected 设置为True将在数据库关闭后继续保持数据集的开启状态. 3. 数据获取 名称 类型 说明 Fe ...

  2. Deep Learning framework --- MexNet 安装,测试,以及相关问题总结

    Deep Learning framework --- MexNet 安装,测试,以及相关问题总结  一.安装:   参考博文:http://www.open-open.com/lib/view/op ...

  3. PowerDesigner使用方法入门学习

    [转载:https://www.cnblogs.com/biehongli/p/6025954.html] 1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自 ...

  4. HDU 4825 Xor Sum(01字典树入门题)

    http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...

  5. HDU 4312 Meeting point-2(切比雪夫距离转曼哈顿距离)

    http://acm.hdu.edu.cn/showproblem.php?pid=4312 题意:在上一题的基础上,由四个方向改为了八个方向. 思路: 引用自http://blog.csdn.net ...

  6. 关于导入geoserver 源码到Eclipse编译运行

    参考http://blog.csdn.net/gisshixisheng/article/details/43016443 和  http://blog.sina.com.cn/s/blog_6e37 ...

  7. android studio 的基本使用和建立一个小项目

    https://github.com/allenxieyusheng/Android-Studio

  8. Linux 服务器 安装 goflyway

    github官方开发主页:https://github.com/coyove/goflyway goflyway的用途就不说了,你能搜到此文章就说明已经知道了. centos和Ubuntu均可使用,其 ...

  9. tarjan 缩点(模板)

    描述: 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 注:允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 思路: ...

  10. django使用表单

    假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素: <form action="/your-name/" method="po ...