- 浏览: 97795 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chensong215:
无法获取到ProgressEvent中的bytesTotal
自定义DownloadProgressBar -
qq2464785999:
非常感谢。
测试后,发现要用相对路径的话,好像要这么写
va ...
Flex写XML文件
最近在思考如何能够让自己的Flex(或者AS3)程序在初始化时更加漂亮,答案就是使用自定义preloader,即DownloadProgressBar,以下就是自定义DownloadProgressBar,这个自定义的DownloadProgressBar包括一个image和一个根据下载进度前进的进度条。先说说原理:)
1、首先你需要extends DownloadProgressBar。
2、使用Loader方法load进来一个image图片,例如png等格式,并addChild到DownloadProgressBar里面。
3、然后重写set proloader方法,这点很重要。
4、然后添加4个监听事件,并实现4个监听时间的具体方法和进一步操作
preloader.addEventListener(ProgressEvent.PROGRESS, myHandleProgress);
preloader.addEventListener(Event.COMPLETE, myHandleComplete);
preloader.addEventListener(FlexEvent.INIT_PROGRESS, myHandleInitProgress);
preloader.addEventListener(FlexEvent.INIT_COMPLETE, myHandleInitEnd);
5、preloader.addEventListener(ProgressEvent.PROGRESS, myHandleProgress); 这里可以得到bytesLoaded和bytesTotal的內容,
6,在使用graphics画一個長方形,并且这个长方形的长就是bytesLoaded/bytesTotal。这样就能实时显示下载进度。
package com.sheldon.pro.utils{
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.text.TextFormat;
import mx.events.FlexEvent;
import mx.preloaders.DownloadProgressBar;
public class MyDownProBar extends DownloadProgressBar{
private var logo: Loader;
private var txt: TextField;
private var _barSprite:Sprite;
private var _preloader:Sprite;
//private var ProgressBarSpritIsAdded:Boolean = false;
public function MyDownProBar(){
logo = new Loader();
logo.load(new URLRequest("assets/panelicon.png"));
addChild(logo);
var style : TextFormat = new TextFormat(null,null,0xFFFFFF,null,null,null,null,null,"center");
txt = new TextField();
txt.defaultTextFormat = style;
txt.width = 200;
txt.selectable = false;
txt.height = 20;
addChild(txt);
super();
}
//重写preloader,让swf执行加载的时候~进行你希望的操作~
override public function set preloader(value:Sprite):void{
_preloader = value;
//四个侦听~分别是 加载进度 / 加载完毕 / 初始化进度 / 初始化完毕
_preloader.addEventListener(ProgressEvent.PROGRESS,load_progress);
_preloader.addEventListener(Event.COMPLETE,load_complete);
_preloader.addEventListener(FlexEvent.INIT_PROGRESS,init_progress);
_preloader.addEventListener(FlexEvent.INIT_COMPLETE,init_complete);
stage.addEventListener(Event.RESIZE,resize);
resize(null);
}
private function remove():void{
_preloader.removeEventListener(ProgressEvent.PROGRESS,load_progress);
_preloader.removeEventListener(Event.COMPLETE,load_complete);
_preloader.removeEventListener(FlexEvent.INIT_PROGRESS,init_progress);_preloader.removeEventListener(FlexEvent.INIT_COMPLETE,init_complete);
stage.removeEventListener(Event.RESIZE,resize);
}
private function resize(e:Event):void{
logo.x = (stage.stageWidth -40)/2;
logo.y = (stage.stageHeight - 80)/2-20;
txt.x = (stage.stageWidth - 200)/2;
txt.y = logo. y +65;
graphics.clear();
graphics.beginFill(0x333333);
graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
graphics.endFill();
}
private function load_progress(e : ProgressEvent):void{
addProgressBarSprit();
txt.text = "正在加载..."+int(e.bytesLoaded/e.bytesTotal*100)+"%";
//txt.text = "已下载 " + e.bytesLoaded + " byte,总大小 " + e.bytesTotal + " byte.";
drawProgressBar(e.bytesLoaded, e.bytesTotal);
//if (txt != null){
//txt.text = "下载进度:已下载 " + e.bytesLoaded + " byte,总大小 " + e.bytesTotal + " byte.";
//}
//drawProgressBar(e.bytesLoaded, e.bytesTotal);
}
private function load_complete(e:Event):void{
if(txt != null){
txt.text = "加载完毕!";
}
drawProgressBar(1,1);
}
private function init_progress(e:FlexEvent):void{
if(txt != null){
txt.text ="正在初始化...";
}
drawProgressBar(1,1);
}
private function init_complete(e:FlexEvent):void{
if(txt != null){
txt.text = "初始化完毕!";
}
drawProgressBar(1,1);
remove();
//最后这个地方需要dpe一个Event.COMPLETE事件..表示加载完毕让swf继续操作~
dispatchEvent(new Event(Event.COMPLETE));
}
private function addProgressBarSprit():void{
//绘制背景渐变
var matrix : Matrix = new Matrix();
matrix.createGradientBox(this.stage.stageWidth,this.stage.stageHeight,Math.PI/2);
var colors : Array=[0x05BBD,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-145,this.stage.stageHeight/2-105,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-165,this.stage.stageHeight/2 -23,304,20);
_Sprite2.graphics.endFill();
//--------------------------------
//加载进度条Sprite
_barSprite = new Sprite();
addChild(_barSprite);
_barSprite.x = this.stage.stageWidth/2 -163;
_barSprite.y = this.stage.stageHeight/2 -21;
//---------------------------------
//加载进度条文字
// txt = new TextField();
// addChild(txt);
// txt.textColor = 0x333333;
// txt.width = 300;
// txt.height = 18;
// txt.x = this.stage.stageWidth/2-152;
// txt.y = this.stage.stageHeight/2 + 20;
}
//刷新进度条
private function drawProgressBar(bytesLoader:Number,bytesTotal:Number):void{
if(_barSprite != null && txt !=null){
var g:Graphics = _barSprite.graphics;
g.clear();
var matrix : Matrix = new Matrix();
matrix.createGradientBox(300*(bytesLoader/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*(bytesLoader/bytesTotal),16);
g.endFill();
}
}
}
}
Flex4中应用这个自定义的DownloadProgressBar.as
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:ho="library://ns.adobe.com/flex/halo"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
preloader="com.sheldon.pro.utils.MyDownProBar">
</s:Application>
1、首先你需要extends DownloadProgressBar。
2、使用Loader方法load进来一个image图片,例如png等格式,并addChild到DownloadProgressBar里面。
3、然后重写set proloader方法,这点很重要。
4、然后添加4个监听事件,并实现4个监听时间的具体方法和进一步操作
preloader.addEventListener(ProgressEvent.PROGRESS, myHandleProgress);
preloader.addEventListener(Event.COMPLETE, myHandleComplete);
preloader.addEventListener(FlexEvent.INIT_PROGRESS, myHandleInitProgress);
preloader.addEventListener(FlexEvent.INIT_COMPLETE, myHandleInitEnd);
5、preloader.addEventListener(ProgressEvent.PROGRESS, myHandleProgress); 这里可以得到bytesLoaded和bytesTotal的內容,
6,在使用graphics画一個長方形,并且这个长方形的长就是bytesLoaded/bytesTotal。这样就能实时显示下载进度。
package com.sheldon.pro.utils{
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.text.TextFormat;
import mx.events.FlexEvent;
import mx.preloaders.DownloadProgressBar;
public class MyDownProBar extends DownloadProgressBar{
private var logo: Loader;
private var txt: TextField;
private var _barSprite:Sprite;
private var _preloader:Sprite;
//private var ProgressBarSpritIsAdded:Boolean = false;
public function MyDownProBar(){
logo = new Loader();
logo.load(new URLRequest("assets/panelicon.png"));
addChild(logo);
var style : TextFormat = new TextFormat(null,null,0xFFFFFF,null,null,null,null,null,"center");
txt = new TextField();
txt.defaultTextFormat = style;
txt.width = 200;
txt.selectable = false;
txt.height = 20;
addChild(txt);
super();
}
//重写preloader,让swf执行加载的时候~进行你希望的操作~
override public function set preloader(value:Sprite):void{
_preloader = value;
//四个侦听~分别是 加载进度 / 加载完毕 / 初始化进度 / 初始化完毕
_preloader.addEventListener(ProgressEvent.PROGRESS,load_progress);
_preloader.addEventListener(Event.COMPLETE,load_complete);
_preloader.addEventListener(FlexEvent.INIT_PROGRESS,init_progress);
_preloader.addEventListener(FlexEvent.INIT_COMPLETE,init_complete);
stage.addEventListener(Event.RESIZE,resize);
resize(null);
}
private function remove():void{
_preloader.removeEventListener(ProgressEvent.PROGRESS,load_progress);
_preloader.removeEventListener(Event.COMPLETE,load_complete);
_preloader.removeEventListener(FlexEvent.INIT_PROGRESS,init_progress);_preloader.removeEventListener(FlexEvent.INIT_COMPLETE,init_complete);
stage.removeEventListener(Event.RESIZE,resize);
}
private function resize(e:Event):void{
logo.x = (stage.stageWidth -40)/2;
logo.y = (stage.stageHeight - 80)/2-20;
txt.x = (stage.stageWidth - 200)/2;
txt.y = logo. y +65;
graphics.clear();
graphics.beginFill(0x333333);
graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
graphics.endFill();
}
private function load_progress(e : ProgressEvent):void{
addProgressBarSprit();
txt.text = "正在加载..."+int(e.bytesLoaded/e.bytesTotal*100)+"%";
//txt.text = "已下载 " + e.bytesLoaded + " byte,总大小 " + e.bytesTotal + " byte.";
drawProgressBar(e.bytesLoaded, e.bytesTotal);
//if (txt != null){
//txt.text = "下载进度:已下载 " + e.bytesLoaded + " byte,总大小 " + e.bytesTotal + " byte.";
//}
//drawProgressBar(e.bytesLoaded, e.bytesTotal);
}
private function load_complete(e:Event):void{
if(txt != null){
txt.text = "加载完毕!";
}
drawProgressBar(1,1);
}
private function init_progress(e:FlexEvent):void{
if(txt != null){
txt.text ="正在初始化...";
}
drawProgressBar(1,1);
}
private function init_complete(e:FlexEvent):void{
if(txt != null){
txt.text = "初始化完毕!";
}
drawProgressBar(1,1);
remove();
//最后这个地方需要dpe一个Event.COMPLETE事件..表示加载完毕让swf继续操作~
dispatchEvent(new Event(Event.COMPLETE));
}
private function addProgressBarSprit():void{
//绘制背景渐变
var matrix : Matrix = new Matrix();
matrix.createGradientBox(this.stage.stageWidth,this.stage.stageHeight,Math.PI/2);
var colors : Array=[0x05BBD,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-145,this.stage.stageHeight/2-105,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-165,this.stage.stageHeight/2 -23,304,20);
_Sprite2.graphics.endFill();
//--------------------------------
//加载进度条Sprite
_barSprite = new Sprite();
addChild(_barSprite);
_barSprite.x = this.stage.stageWidth/2 -163;
_barSprite.y = this.stage.stageHeight/2 -21;
//---------------------------------
//加载进度条文字
// txt = new TextField();
// addChild(txt);
// txt.textColor = 0x333333;
// txt.width = 300;
// txt.height = 18;
// txt.x = this.stage.stageWidth/2-152;
// txt.y = this.stage.stageHeight/2 + 20;
}
//刷新进度条
private function drawProgressBar(bytesLoader:Number,bytesTotal:Number):void{
if(_barSprite != null && txt !=null){
var g:Graphics = _barSprite.graphics;
g.clear();
var matrix : Matrix = new Matrix();
matrix.createGradientBox(300*(bytesLoader/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*(bytesLoader/bytesTotal),16);
g.endFill();
}
}
}
}
Flex4中应用这个自定义的DownloadProgressBar.as
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:ho="library://ns.adobe.com/flex/halo"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
preloader="com.sheldon.pro.utils.MyDownProBar">
</s:Application>
发表评论
-
flex 自定义多个命名空间以及标签名
2013-01-22 15:21 1266flex 自定义多个命名空 ... -
FLEX中使用AS动态创建DataGrid
2013-01-09 16:24 883FLEX中使用AS动态创建DataGrid 2010年2月6日 ... -
flex与flash之间相互调用
2012-12-12 12:39 610http://www.cnblogs.com/kaixuan/ ... -
Flex与Flex创建的swf通信
2012-12-12 10:16 703加载子SWF的Flex程序代码 <?xml vers ... -
[AS3]加载视频(FLV)文件
2012-12-06 15:11 847[AS3]加载视频(FLV)文件 分类: FLEX/CS3-- ... -
通过FileReference打开本地图片崩溃的解决方法
2012-12-06 14:02 705通过FileReference打开本地图片崩溃的解决方法 最近 ... -
使用FileReference的load()方法加载本地图片
2012-12-06 13:56 8961、要想使用FileReference的load()方法和da ... -
[AS3]Bitmap序列化(将BitmapData保存为原生Binary/ByteArray)
2012-12-06 13:48 748[AS3]Bitmap序列化(将BitmapData保存为原生 ... -
as3 画五角星算法
2012-12-05 16:49 2594as3 画五角星算法 阅读:10次 时间:2012-03- ... -
flex嵌入完整html
2012-11-29 11:18 797有时候我们需要在Flex应用中嵌入HTML代码,根据嵌入HTM ... -
flex4 textArea的htmlText属性
2012-11-29 11:13 3097它现在包含Text布局框架(Text Layout Frame ... -
Tooltip应用
2012-11-29 11:11 699创建ToolTip: var errorToolTip:To ... -
数据绑定显示问题
2012-10-27 12:11 629数据绑定实时变化。 XMLListCollection 可以变 ... -
待解决问题
2012-09-18 23:48 6891.仪表盘 2.渐变填充的使用 3.发光效果的完美运用 能在一 ... -
as3加载外部图片的两种方式
2012-09-09 11:46 986package net.burchin.loading { ... -
公式as3
2012-09-06 18:13 0as3 1人收藏此文章, 我要收藏 发表于1年前(2011-0 ... -
Flex中多线程的实现
2012-09-06 10:49 3466破阵子_如是我闻 如是我闻。一时佛在舍卫国,祗树给孤独园.. ... -
自定义column renderer
2012-08-09 15:07 896<?xml version="1.0" ... -
drowshadowFilter
2012-08-09 15:05 648DropShadowFilter 类,在Flash中为各种对象 ... -
123123
2012-08-08 17:16 0http://www.oschina.net/code/sni ...
相关推荐
NULL 博文链接:https://demojava.iteye.com/blog/1159535
C# 自定义控件 自定义ComboBox。其他控件的自定义与此类似。
QT自定义窗口 自由拖动 自定义标题
tablayout+viewpager自定义tab和自定义指示器。完美解决滑动卡顿。
用户自定义控件,用户自定义控件,用户自定义控件,用户自定义控件,用户自定义控件,用户自定义控件,用户自定义控件,用户自定义控件,用户自定义控件用户自定义控件,用户自定义控件,用户自定义控件,用户自定义...
springboot工程通过自定义response注解、java反射机制、自定义java拦截器、自定义功能类实现WebMvcConfigurer接口等功能,实现自定义规范化返回数据结构。
vb.net 自定义控件 自定义属性 UITypeEditor UI 类型编辑器 实例 提供一个示例 UITypeEditor,它使用 IWindowsFormsEditorService 显示用于用户输入的 Form。 IWindowsFormsEditorService 只能通过 PropertyGrid ...
自定义按钮自定义按钮自定义按钮自定义按钮自定义按钮
自定义导航模板
1.包含自定义消息 2.包含Panel类型的自定义插件 3.包含Display类型的自定义插件
这是我用C#写的自定义组件和控件,内附一个testForm来演示如何使用。 其中,自定义的组件有:速选组件、窗口靠边停靠组件、窗口抖动组件。 自定义控件有:黑白的菜单栏、带进度显示的进度条等。
自定义文件格式 自定义文件格式 自定义文件格式 自定义文件格式 自定义文件格式
Android自定义中国象棋,原创-------转载注明出处; Android自定义中国象棋,原创-------转载注明出处; Android自定义中国象棋,原创-------转载注明出处; Android自定义中国象棋,原创-------转载注明出处; ...
FreeSwitch完整的自定义模块定义和改善自定义事件的例子,详细介绍见博客:https://blog.csdn.net/xxm524/article/details/126211171
java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签
自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...
介绍了mybatis自定义标签,添加自定义标签的实现代码,通过实例代码展示给大家
sql自定义函数 sql自定义函数 sql自定义函数
uni-app自定义弹窗组件指令部分,支持自定义图片,文本、按钮等功能。