`

修改flex默认loading

    博客分类:
  • flex
阅读更多

一:

SWF Flex 2 Preloader
SWF Flex 2 Preloader View Source
SWF Flex 2 Preloader Source ZIP

GIF Flex 2 Preloader
GIF Flex 2 Preloader View Source
GIF Flex 2 Preloader Source ZIP

PNG Flex 2 Preloader
PNG Flex 2 Preloader View Source
PNG Flex 2 Preloader Source ZIP

 

 

二:

 flex应用看久了,一个默认的装载loading界面就会导致审美疲劳,下面提供一种方法,让你可以自定义你的装载界面。

     

     1,在src目录下建立自定义类,两个文件代码如下:

Preloader.as

package com.preloader
{
    import mx.preloaders.DownloadProgressBar;
    import flash.display.Sprite;
    import flash.events.ProgressEvent;
    import flash.events.Event;
    import mx.events.FlexEvent;
    import mx.managers.SystemManager;
    import mx.managers.BrowserManager;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
        
    public class Preloader extends DownloadProgressBar
    {
        public var m_Progress: ProgressBar;
        private var m_Timer: Timer;
        
        public function Preloader(): void{
            super();
            var browser: BrowserManager;
            m_Progress = new ProgressBar;            
            this.addChild(m_Progress);
            m_Timer = new Timer(1);
            m_Timer.addEventListener(TimerEvent.TIMER, timerEventHandler);
            m_Timer.start();
        }
        override public function set preloader(value:Sprite):void{
            value.addEventListener(ProgressEvent.PROGRESS, progressEventHandler);
            value.addEventListener(Event.COMPLETE, completeEventHandler);
            value.addEventListener(FlexEvent.INIT_PROGRESS, initProgressEventHandler);
            value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteEventHandler);            
        }        
        private function progressEventHandler(event: ProgressEvent): void{
            var progress: Number = event.bytesLoaded / event.bytesTotal * 100;
            if (m_Progress){
                m_Progress.progress = progress;
            }
        }
        private function timerEventHandler(event: TimerEvent): void{
            this.stage.addChild(this);
            var width: Number = this.stage.stageWidth * 40 / 100; // Get 40% for the Stage width
            // Set the Position of the Progress bar to the middle of the screen
            m_Progress.x = (this.stage.stageWidth - m_Progress.getWidth()) / 2;
            m_Progress.y = (this.stage.stageHeight - m_Progress.getHeight()) / 2;
            m_Progress.refreshProgressBar();
        }
        private function completeEventHandler(event: Event): void{
            var i: int = 0;
        }
        private function initProgressEventHandler(event: FlexEvent): void{
            var i: int = 0;
        }
        private function initCompleteEventHandler(event: FlexEvent): void{
            m_Progress.ready = true;
            m_Timer.stop();
            this.dispatchEvent(new Event(Event.COMPLETE));
        }
    }
}

  

ProgressBar.as

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
package com.preloader
{    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Graphics;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFieldAutoSize;
    import flash.utils.ByteArray;
    
    import mx.controls.Label;
    import mx.graphics.codec.PNGEncoder;
    
    public class ProgressBar extends Loader
    {
        // Logo picture
        [Embed(source="icon/loader.png")]
        [Bindable]
        private var logoClass: Class;        
        private var Logo: Bitmap;
        
        private var m_Ready: Boolean;
        private var m_Progress: Number;
        private var m_BitmapData: BitmapData;

        // Constant to change to fit your own layout
        private static var ProgressWidth: int = 150; // Progress bar width
        private static var PictureWidth: int = 48;  // Logo picture width
        private static var LeftMargin: int = 1;      // Left Margin
        private static var RightMargin: int = 1;     // Right Margin
        private static var Spacing: int = 10;        // Spacing between logo and progress bar
        private static var TopMargin: int = 1;       // Top Margin
        private static var BottomMargin: int = 1;    // Bottom Margin
        private static var PictureHeight: int = 48; // Logo picture height
        private static var ProgressHeight: int = 12; // Progress bar height
        
        private static var ProgressBarBackground: uint = 0xFFFFFF;
        private static var progressBarOuterBorder: uint = 0x323232;
        private static var ProgressBarColor: uint = 0xFF4707;
        private static var ProgressBarInnerColor: uint = 0xFFFFFF;
        
        public function ProgressBar(): void{
            super();
            m_Progress = 0;
            Logo = new logoClass as Bitmap;
            this.addEventListener(Event.RENDER, renderEventHandler);
        }
        private function renderEventHandler(event: Event): void{
            
        }
        public function refreshProgressBar(): void{            
            m_BitmapData = drawProgress(); // Create the bitmapdata object
            var encoder: PNGEncoder = new PNGEncoder();
            var byteArray: ByteArray = encoder.encode(m_BitmapData); // Encode the bitmapdata to a bytearray
            this.loadBytes(byteArray); // Draw the bitmap on the loader object
        }        
        public function getWidth(): Number{
            return LeftMargin + PictureWidth + Spacing + ProgressWidth + RightMargin;
        }
        public function getHeight(): Number{
            return TopMargin + PictureHeight + BottomMargin;
        }
        private function drawProgress(): BitmapData{
            // Create the bitmap class object
            var bitmapData: BitmapData = new BitmapData(getWidth(), getHeight(), true, 0);
            
            // Draw the Progress Bar
            var sprite: Sprite = new Sprite();
            var graph: Graphics = sprite.graphics;
            
            // Draw the progress bar background
            graph.beginFill(ProgressBarBackground);
            graph.lineStyle(1, progressBarOuterBorder, 1, true);
            var containerWidth: Number = ProgressWidth;
            var px: int = getWidth() - RightMargin - ProgressWidth;
            var py: int = (getHeight() - ProgressHeight)*2/3;
            graph.drawRoundRect(px, py, containerWidth, ProgressHeight, 0);
            containerWidth -= 4;
            var progressWidth: Number = containerWidth * m_Progress / 100;
            graph.beginFill(ProgressBarColor);
            graph.lineStyle(1, ProgressBarInnerColor, 1, true);
            graph.drawRoundRect(px+1, py+1, progressWidth, ProgressHeight-2, 0);

            //Construct the Text Field Object and put the progress value in it
            var textField: TextField = new TextField();
            //textField.background = true;
            //textField.border = true;
            var format:TextFormat = new TextFormat();
            format.font = "Verdana";
            format.color = 0x000000;
            format.size = 10;
            //format.bold = true;
            textField.defaultTextFormat = format;
            textField.text = m_Progress.toFixed(0) + "%";
            //Create a BitmapData object and take the Width and height of the TextField text.
            var textBitmapData: BitmapData = new BitmapData(textField.textWidth + 5, textField.textHeight);
            //Set the BitmapData object background color to the background color of the progress bar
            textBitmapData.floodFill(0, 0, ProgressBarBackground);
            //Draw the TextFiel object in the BitmapData object
            textBitmapData.draw(textField);
            //Construct the matrix object
            //The matrix object is used to place the text            
            var textBitmapMatrix: Matrix = new Matrix();            
            textBitmapMatrix.translate(px + (containerWidth-textBitmapData.width) / 2, py + (ProgressHeight - textBitmapData.height) / 2-2);

            var textField1: TextField = new TextField();
            var format1:TextFormat = new TextFormat();
            format1.color = 0x0b333c;
            textField1.defaultTextFormat = format1;
            textField1.text = "系统正在装载,请稍候";
            textField1.autoSize = TextFieldAutoSize.LEFT;
            //Create a BitmapData object and take the Width and height of the TextField text.
            var textBitmapData1: BitmapData = new BitmapData(textField1.textWidth + 5, textField1.textHeight);
            //Set the BitmapData object background color to the background color of the progress bar
            textBitmapData1.floodFill(0, 0, ProgressBarBackground);
            //Draw the TextFiel object in the BitmapData object
            textBitmapData1.draw(textField1);
            //Construct the matrix object
            //The matrix object is used to place the text            
            var textBitmapMatrix1: Matrix = new Matrix();            
            textBitmapMatrix1.translate(px, 2);

            //Draw the sprite object on the parent BitmapData
            bitmapData.draw(sprite);
            
            //Draw the text on the parent BitmapData 
            bitmapData.draw(textBitmapData, textBitmapMatrix, null, null, null, false);
            bitmapData.draw(textBitmapData1, textBitmapMatrix1, null, null, null, false);
            
            //Draw the Logo
            bitmapData.draw(Logo.bitmapData, null, null, null, null, true);
            return bitmapData;                    
        }        
        public function set ready(value: Boolean): void{
            m_Ready = value;            
            this.visible = !value;            
        }
        public function get ready(): Boolean{
            return m_Ready;            
        }
        public function set progress(value: Number): void{
            m_Progress = value;            
        }
        public function get progress(): Number{
            return m_Progress;
        }        
    }
}
 

     

     2,修改你的Application的属性: preloader="com.preloader.Preloader"

     3,运行应用,默认的loading已经变成你想要的效果了。

 

 

三:

首先:修改下载进度的文字为中文 
 
建立扩展至 mx.preloaders.DownloadProgressBar 的一个类:

package myDownPro
{
 import mx.preloaders.DownloadProgressBar; 
 public class myDownProBar extends DownloadProgressBar
 {
  public function myDownProBar()
  {
   //TODO: implement function
   super();
   downloadingLabel="正在下载中...";
   initializingLabel="正在初始化内容...";
  }
 }
}

 
然后在修改 preloader 为你建立的这个类:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   preloader="myDownPro.myDownProBar" layout="absolute">
 <mx:Text text="程序进度条测试" x="37" y="71"/>
</mx:Application>

 

方法二:覆写 DownloadProgressBar 类的 preloader,可以在其中加入你自已喜欢的标签或者图像

package myDownPro
{
 import mx.preloaders.DownloadProgressBar;
 import flash.display.Sprite;
import flash.events.ProgressEvent
import flash.events.* 
import flash.text.TextField;
import  mx.events.*;
 public class myDownProBar2 extends DownloadProgressBar
 {
  public var msg:TextField
  public function myDownProBar2()
  {
   super();  
   msg=new TextField()
   msg.x=200
   msg.y=200
  addChild(msg)
  }
  override public function set preloader(s:Sprite):void{
  s.addEventListener(ProgressEvent.PROGRESS,prog)
  s.addEventListener(Event.COMPLETE,ecom)
  s.addEventListener(FlexEvent.INIT_COMPLETE,flInC)
 s.addEventListener(FlexEvent.INIT_PROGRESS,flIn)
  }
private function prog(e:ProgressEvent):void{
msg.text=String(int(e.bytesLoaded/e.bytesTotal*100))+" %";
}
private function ecom(e:Event):void{
msg.text="完成了!!!!"
}
private function flInC(e:FlexEvent):void{
msg.text="初始化完毕!"//初始完后要派遣 Complete 事件,不然会停在这里,不会进入程序画面的
dispatchEvent(new Event(Event.COMPLETE))
}
private function flIn(e:FlexEvent):void{
msg.text="开始初始化程序"
}
 }
}

 

同样修改<mx:Application>标签的 preloader 为这个类。

分享到:
评论

相关推荐

    Flex 扇形Loading

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

    flex Custom loading example

    网上找了很多都不完整,上传一个工程给大家分享,采用子类...如果需要百分比显示的话可能还需要修改一下代码。 ===================================== 压缩包内容:preloader和button两种方式显示loading fex3源码

    经过修改的flex商城

    在“经过修改的flex商城”中,我们可以推测这个项目已经针对原版Flex商城进行了一些定制或优化,使其更适合4.0以上的Flex版本运行。Flex 4引入了重要的改进,包括Spark组件模型、皮肤层分离以及ActionScript性能提升...

    flex4 IDE 修改及时编译 教程

    2. **热部署**:Flash Builder支持热部署,即在运行状态下修改代码并保存后,应用会自动更新。只需确保“Build automatically”选项开启,并且在调试模式下运行应用。 六、使用FlexExamples 如果你解压了名为...

    Flash(Flex)反编译及修改

    Flash和Flex是Adobe开发的两种相关...总之,Flash和Flex反编译是一个复杂但实用的过程,对于开发者来说,它提供了一种探索、学习和修改已存在SWF应用的方法。不过,应始终尊重他人的知识产权,并遵循合法使用的原则。

    JW flv player flex修改源码并编译

    可能的修改包括更改默认皮肤、添加自定义控制项、优化播放性能或者处理特定的错误和异常。记得在修改前备份原始源码,以防万一。 5. **使用Ant编译**: JW FLV Player的构建过程通常由Ant脚本控制。Ant脚本(如`...

    flex动态修改注册点

    默认情况下,大多数图形的注册点位于左上角,但可以根据需求进行调整,这在创建复杂的动画或布局时尤为有用。 1. **注册点的概念与作用**: 注册点是图形元素的坐标原点,决定了元素如何相对于舞台或其他元素进行...

    FLex loading源码

    Flex Loading 源码是基于Adobe Flex框架实现的一种加载组件的源代码,它主要用于在应用程序启动或数据加载过程中展示进度信息。Flex是一个开源的、基于MXML和ActionScript的开发框架,用于构建富互联网应用程序(RIA...

    FlexBuild 3.0

    默认版本不打包任何编译器在内,运行工具可以生成特定编译的FlexBuild配置 增加Mac OSX版FlexBuild(命令行版本) 修改log,编译后运行log指令会弹出上一次的编译日志 修改编译日志格式 修改flexbuild配置文件格式...

    flex 3.0流程编辑器修改版源码

    《Flex 3.0流程编辑器修改版源码解析与应用》 Flex 3.0是一种基于Adobe Flash Platform的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了强大的图形渲染和用户界面组件库,使得开发者可以创建出交互性强...

    flex tree 修改icon方法

    1. **覆盖默认渲染器**:在Flex中,我们可以创建一个新的MXML或ActionScript类,该类继承自默认的TreeItemRenderer(通常是spark.components.TreeItemRenderer)。然后,在这个自定义渲染器中,我们可以添加一个...

    Flex Flex Flex Flex

    Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex ...

    flex 面试题flex

    Flex Builder 3创建的MXML页面默认背景通常是蓝色。可以自定义皮肤或修改CSS样式来更改背景颜色。 以上是Flex面试题中涉及的主要知识点,理解和掌握这些内容对于Flex开发者来说至关重要,能够帮助他们在面试中表现...

    经过修改皮肤的flex4滚动条。

    本主题将深入探讨如何修改Flex4滚动条的皮肤,以改变Scroller组件的外观。 滚动条在用户界面中起着至关重要的作用,它允许用户浏览超出视口的内容。在Flex4中,Scroller组件是一个容器,它可以包含其他组件,并提供...

    Flex 4 进度条的皮肤

    每个组件都有一个默认皮肤,但你可以根据需要创建自定义皮肤,以便改变组件的视觉效果。 1. **创建进度条皮肤的基本步骤**: - 使用Flash Builder或Flex SDK的命令行工具创建一个新的Flex项目。 - 导入`spark....

    flex Tree checkbox 修改过后的

    标题提到的“flex Tree checkbox 修改过后”,意味着原生的Flex Tree控件已经进行了自定义修改,以适应带有复选框功能的需求。 在Flex中实现Tree与Checkbox结合的关键点包括: 1. **创建自定义TreeItemRenderer**...

    flex布局Flex实现常见布局的汇总

    然后其所有的直接子元素就变成flex子元素了,在flex里存在两根轴,叫主轴和交叉轴,互相垂直,主轴默认水平,flex子元素默认会沿主轴排列,可以控制flex子元素在主轴上伸缩,主轴方向可以设置,相关的css属性分为两...

    FLEX 如何彻底清空

    在FLEX 里,解决FLEX 占用内存一直不减,无法清除的问题

    FLEX安装和配置全步骤

    3. 编辑主类(通常是src目录下的Main.mxml),修改其中的`&lt;mx:Label&gt;`标签内容,以显示你想要的文字。 4. 按`Ctrl + B`或点击运行按钮来编译并运行项目。浏览器中将展示你的第一个FLEX应用。 **理解FLEX的基本结构*...

Global site tag (gtag.js) - Google Analytics