- 浏览: 100489 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1337flex 自定义多个命名空 ... -
FLEX中使用AS动态创建DataGrid
2013-01-09 16:24 919FLEX中使用AS动态创建DataGrid 2010年2月6日 ... -
flex与flash之间相互调用
2012-12-12 12:39 628http://www.cnblogs.com/kaixuan/ ... -
Flex与Flex创建的swf通信
2012-12-12 10:16 734加载子SWF的Flex程序代码 <?xml vers ... -
[AS3]加载视频(FLV)文件
2012-12-06 15:11 864[AS3]加载视频(FLV)文件 分类: FLEX/CS3-- ... -
通过FileReference打开本地图片崩溃的解决方法
2012-12-06 14:02 720通过FileReference打开本地图片崩溃的解决方法 最近 ... -
使用FileReference的load()方法加载本地图片
2012-12-06 13:56 9381、要想使用FileReference的load()方法和da ... -
[AS3]Bitmap序列化(将BitmapData保存为原生Binary/ByteArray)
2012-12-06 13:48 761[AS3]Bitmap序列化(将BitmapData保存为原生 ... -
as3 画五角星算法
2012-12-05 16:49 2630as3 画五角星算法 阅读:10次 时间:2012-03- ... -
flex嵌入完整html
2012-11-29 11:18 815有时候我们需要在Flex应用中嵌入HTML代码,根据嵌入HTM ... -
flex4 textArea的htmlText属性
2012-11-29 11:13 3119它现在包含Text布局框架(Text Layout Frame ... -
Tooltip应用
2012-11-29 11:11 732创建ToolTip: var errorToolTip:To ... -
数据绑定显示问题
2012-10-27 12:11 681数据绑定实时变化。 XMLListCollection 可以变 ... -
待解决问题
2012-09-18 23:48 7241.仪表盘 2.渐变填充的使用 3.发光效果的完美运用 能在一 ... -
as3加载外部图片的两种方式
2012-09-09 11:46 1047package net.burchin.loading { ... -
公式as3
2012-09-06 18:13 0as3 1人收藏此文章, 我要收藏 发表于1年前(2011-0 ... -
Flex中多线程的实现
2012-09-06 10:49 3521破阵子_如是我闻 如是我闻。一时佛在舍卫国,祗树给孤独园.. ... -
自定义column renderer
2012-08-09 15:07 965<?xml version="1.0" ... -
drowshadowFilter
2012-08-09 15:05 678DropShadowFilter 类,在Flash中为各种对象 ... -
123123
2012-08-08 17:16 0http://www.oschina.net/code/sni ...
相关推荐
本文将围绕“flex3自定义DownloadProgressBar”这一主题展开,讲解如何在Flex3中创建一个定制化的下载进度条组件,并探讨相关的编程技术和实践。 一、自定义组件基础 在Flex中,自定义组件是通过继承已有的...
在给定的资源"安卓进度条loadingprogress相关-DownloadProgressBar特别的进度条.rar"中,我们可以找到一些关于自定义进度条的实践案例,尤其是针对下载进度显示的`DownloadProgressBar`。这个特殊的进度条可能包含了...
本文将深入探讨如何仿照华为应用市场的下载进度条来实现一个自定义的DownloadProgressBar。这个过程涉及到Android图形绘制、线程管理、事件监听以及动画效果的实现。 首先,我们需要了解华为应用市场下载进度条的...
4. **自定义控件库**:一些开源项目提供了预设的个性进度条,例如,这个压缩包中的`DownloadProgressBar-master`可能就是一个自定义进度条库。开发者可以直接集成这些库,快速实现各种酷炫效果。 三、使用步骤 使用...
这个项目名为"Android代码-DownloadProgressbar",显然旨在教我们如何在Android应用中实现一个自定义的下载进度条。下面,我们将深入探讨这个主题,并结合可能的源代码文件来理解其工作原理。 首先,下载进度条通常...
源码名为`DownloadProgressBar`,表明这是一个自定义的进度条控件,旨在提供更吸引用户的界面体验。 `DownloadProgressBar`的设计灵感可能来源于Dribbble这样的设计社区,这些社区经常有设计师分享他们的创新设计,...
Android实现百分比下载进度条效果的主要思想是通过自定义View实现,首先需要在attrs.xml文件中定义一个自定义属性,即百分比文字的大小,然后在DownLoadProgressbar.java文件中编写自定义View的代码。在自定义View...
在HTML5中,`<progress>`元素提供了内置的进度指示功能,但为了自定义样式和交互,开发者往往会选择使用CSS和JavaScript进行更复杂的实现。 在"DownloadProgressBar"源码中,我们可以期待以下几个关键点: 1. **...
其中,"DownloadProgressBar"很可能是一个专门用于显示下载进度的自定义控件。 1. **多线程网络下载**: 在Android中,由于主线程(UI线程)负责处理用户交互,因此网络请求不能在主线程中进行,否则会导致应用无...
`DownloadProgressBar`可能是一个自定义的UI组件,用于显示下载进度,它能够实时更新每个线程的下载进度并合并成整体的进度条。 JavaApk源码说明可能包含了一个简单的多线程下载示例,你可以通过阅读源码来学习如何...