- 浏览: 261475 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
sflscar:
太好了,我搞了一下午,批量插入,第一个参数个数没对sql批量导 ...
redis pipe大数据量导入 -
赵青青:
那 entity.hbm.xml 文件中的主健策略怎么配置 ...
Hibernate 和 Access -
GapStar:
换成flash IconCellRenderer.as应该怎么 ...
DataGrid 中加入图标 -
binbinyouli:
不好意思。我把楼主注释掉得部分打开了。但是我看楼主有传递对象的 ...
Flex Flash 和JAVA 在Socket交互 -
binbinyouli:
不知道前两位评论人时怎么做得。我再做这个例子的时候出现了安全沙 ...
Flex Flash 和JAVA 在Socket交互
转自: http://riashanghai.com/zh-hant/node/48
Flex 的默认的 Preloader, 平心而论,不是很好看。一个个性化的Preloader,基本上要包括三个部分。
1. 公司或者网站Logo,或者个性化的预载图片。好似是桌面软件的Splash Screen。
2. 载入数据的进度,文字形式的百分比。
3. 载入进度条。
preloader不像Flex项目中普通的部件可以通过CSS进行设置,是因为当程序初始载入时,CSS文件的设定还未被载入,所以不好通过CSS进行外观的控制。
这里有Ted把SWF,GIF 和 PNG 文件作为 Preloader 的教程。不过这里没有上述元素三合一的例子。
把网上的资料总结一下,这里放个三合一的例子。最终效果预览,
设置WEB程序的Preloader为自制的Preloader时,要修改主程序Application标签中的preloader属性,
- <?xml version="1.0" encoding="utf-8"?>
- <MX:APPLICATION xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" preloader="com.ibsol.view.Preloader">
- <MX:SCRIPT>
- ...</MX:SCRIPT></MX:APPLICATION>
<?xml version="1.0" encoding="utf-8"?> ...
这里的com.ibsol.view.Preloader是自定义Preloader类的路径。
Preloader要扩展DownloadProgressBar类才能设置自己的Preloader
- package com.ibsol.view
- {
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.ProgressEvent;
- import flash.events.TimerEvent;
- import flash.text.TextField;
- import flash.utils.Timer;
- import mx.events.FlexEvent;
- import mx.preloaders.DownloadProgressBar;
- public class Preloader extends DownloadProgressBar
- {
- //显示进度的文字
- private var progressText:TextField;
- //进度条
- public var img:WelcomeScreen;
- //logo页面
- public var logo:WelcomeLogo;
- private var _timer:Timer;
- public function Preloader()
- {
- super();
- //加入logo
- logo = new WelcomeLogo();
- this.addChild(logo);
- //加入进度条
- img = new WelcomeScreen();
- this.addChild(img);
- //加入进度文字
- progressText = new TextField();
- progressText.x = 40;
- progressText.y = 90;
- this.addChild(progressText);
- //进度条计时器初始化,我们实现进度条的原理就是不停的刷新进图条图片
- //因为每次进度条的长度不同,所以就有进度条在走的效果
- _timer = new Timer(1);
- _timer.addEventListener(TimerEvent.TIMER, drawTimerHandler);
- _timer.start();
- }
- /**
- * override这个函数,来实现自己Preloader的设置,而不是用其默认的设置
- */
- override public function set preloader(value:Sprite):void
- {
- value.addEventListener(ProgressEvent.PROGRESS, progHandler);
- value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteHandler);
- //在这里设置预载界面居中
- //如果在初始化函数中设置,会有stageWidth和最终界面大小不一致的错误,而导致不能居中
- x = (stageWidth/2) - (300/2);
- y = (stageHeight/2) - (180/2);
- }
- private function progHandler(e:ProgressEvent):void
- {
- //计算进度,并且设置文字进度和进度条的进度。
- var prog:Number = e.bytesLoaded/e.bytesTotal*100;
- progressText.text = "已下载 " + String(int(prog)) + "%";
- if(img)
- {
- img.progress = prog;
- }
- }
- private function compHandler(e:Event):void
- {
- }
- private function initCompleteHandler(e:FlexEvent):void
- {
- //如果载入完毕,则停止刷新
- img.ready = true;
- _timer.stop();
- //测试专用。下载完毕后,不马上跳到程序的默认界面。而是停顿10秒后再跳入。
- var timer:Timer = new Timer(10000, 1);
- timer.addEventListener(TimerEvent.TIMER, dispatchComplete);
- timer.start();
- }
- private function initProgHandler(e:FlexEvent):void
- {
- }
- /**
- * 一定要分发这个事件,来通知程序已经完全下载,可以进入程序的默认界面了
- */
- private function dispatchComplete(event:TimerEvent):void
- {
- this.dispatchEvent(new Event(Event.COMPLETE));
- }
- /**
- * 每个时钟周期都刷新进度条图片
- */
- private function drawTimerHandler(event:TimerEvent):void
- {
- img.refresh();
- }
- }
- }
package com.ibsol.view { import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.events.TimerEvent; import flash.text.TextField; import flash.utils.Timer; import mx.events.FlexEvent; import mx.preloaders.DownloadProgressBar; public class Preloader extends DownloadProgressBar { //显示进度的文字 private var progressText:TextField; //进度条 public var img:WelcomeScreen; //logo页面 public var logo:WelcomeLogo; private var _timer:Timer; public function Preloader() { super(); //加入logo logo = new WelcomeLogo(); this.addChild(logo); //加入进度条 img = new WelcomeScreen(); this.addChild(img); //加入进度文字 progressText = new TextField(); progressText.x = 40; progressText.y = 90; this.addChild(progressText); //进度条计时器初始化,我们实现进度条的原理就是不停的刷新进图条图片 //因为每次进度条的长度不同,所以就有进度条在走的效果 _timer = new Timer(1); _timer.addEventListener(TimerEvent.TIMER, drawTimerHandler); _timer.start(); } /** * override这个函数,来实现自己Preloader的设置,而不是用其默认的设置 */ override public function set preloader(value:Sprite):void { value.addEventListener(ProgressEvent.PROGRESS, progHandler); value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteHandler); //在这里设置预载界面居中 //如果在初始化函数中设置,会有stageWidth和最终界面大小不一致的错误,而导致不能居中 x = (stageWidth/2) - (300/2); y = (stageHeight/2) - (180/2); } private function progHandler(e:ProgressEvent):void { //计算进度,并且设置文字进度和进度条的进度。 var prog:Number = e.bytesLoaded/e.bytesTotal*100; progressText.text = "已下载 " + String(int(prog)) + "%"; if(img) { img.progress = prog; } } private function compHandler(e:Event):void { } private function initCompleteHandler(e:FlexEvent):void { //如果载入完毕,则停止刷新 img.ready = true; _timer.stop(); //测试专用。下载完毕后,不马上跳到程序的默认界面。而是停顿10秒后再跳入。 var timer:Timer = new Timer(10000, 1); timer.addEventListener(TimerEvent.TIMER, dispatchComplete); timer.start(); } private function initProgHandler(e:FlexEvent):void { } /** * 一定要分发这个事件,来通知程序已经完全下载,可以进入程序的默认界面了 */ private function dispatchComplete(event:TimerEvent):void { this.dispatchEvent(new Event(Event.COMPLETE)); } /** * 每个时钟周期都刷新进度条图片 */ private function drawTimerHandler(event:TimerEvent):void { img.refresh(); } } }
图片logo层的实现方式是
- package com.ibsol.view
- {
- import flash.display.Loader;
- import flash.utils.ByteArray;
- public class WelcomeLogo extends Loader
- {
- [Embed(source="assets/preloader.png", mimeType="application/octet-stream")]
- public var WelcomeScreenGraphic:Class;
- public function WelcomeLogo()
- {
- this.loadBytes(new WelcomeScreenGraphic() as ByteArray);
- }
- }
- }
package com.ibsol.view { import flash.display.Loader; import flash.utils.ByteArray; public class WelcomeLogo extends Loader { [Embed(source="assets/preloader.png", mimeType="application/octet-stream")] public var WelcomeScreenGraphic:Class; public function WelcomeLogo() { this.loadBytes(new WelcomeScreenGraphic() as ByteArray); } } }
进度条和图片可以放在一层,但是考虑到个时钟周期,都要刷新进度条的图片。
毕竟LOGO不用每次都刷新,那么我们就分开放置了。进度条层的代码如下,
- package com.ibsol.view
- {
- import flash.display.BitmapData;
- import flash.display.Graphics;
- import flash.display.Loader;
- import flash.display.Sprite;
- import flash.utils.ByteArray;
- import mx.graphics.codec.PNGEncoder;
- public class WelcomeScreen extends Loader
- {
- //辅助属性,帮助进行进度条的定位
- private static var _LogoWidth:int = 300;
- private static var _LogoHeight:int = 180;
- private static var _LeftMargin:int = 5;
- private static var _RightMargin:int = 5;
- private static var _TopMargin:int = 1;
- private static var _BottomMargin:int = 1;
- private static var _Padding:int = -60;
- //Progress bar settings
- //进度条的设定,比如显色边框等
- private static var _BarWidth:int = 200;
- private static var _BarHeight:int = 12;
- private static var _BarBackground:uint = 0xFFFFFF;
- private static var _BarOuterBorder:uint = 0x737373;
- private static var _BarColor:uint = 0x6F9FD5;
- private static var _BarInnerColor:uint = 0xFFFFFF;
- private var isReady:Boolean = false;
- public var progress:Number;
- private var _logoData : BitmapData;
- public function WelcomeScreen()
- {
- //this.loadBytes(new WelcomeScreenGraphic() as ByteArray);
- }
- override public function get width() : Number
- {
- return Math.max(_BarWidth, _LogoWidth) + _LeftMargin + _RightMargin;
- }
- override public function get height() : Number
- {
- return _LogoHeight + _BarHeight + _Padding + _TopMargin + _BottomMargin;
- }
- /**
- * 进度载入完毕后,隐藏进度条
- */
- public function set ready(value : Boolean) : void
- {
- this.isReady = value;
- this.visible = !this.isReady;
- }
- public function get ready() : Boolean { return this.isReady; }
- /**
- * 刷新函数,每个时钟周期都被调用的函数
- */
- public function refresh():void
- {
- _logoData = this.drawProgressBar();
- var encoder:PNGEncoder = new PNGEncoder();
- this.loadBytes(encoder.encode(_logoData));
- }
- /**
- * 进度条生成函数
- */
- private function drawProgressBar():BitmapData
- {
- // create bitmap data to create the data
- var data : BitmapData = new BitmapData(this.width, this.height, true, 0);
- // draw the progress bar
- var s:Sprite = new Sprite();
- var g:Graphics = s.graphics;
- // draw the bar background
- g.beginFill(_BarBackground);
- g.lineStyle(2, _BarOuterBorder, 1, true);
- var px : int = (this.width - _BarWidth) / 2;
- var py : int = _TopMargin + _LogoHeight + _Padding;
- g.drawRoundRect(px, py, _BarWidth, _BarHeight, 2);
- var containerWidth : Number = _BarWidth - 4;
- var progWidth:Number = containerWidth * this.progress / 100;
- g.beginFill(_BarColor);
- g.lineStyle(1, _BarInnerColor, 1, true);
- //根据progress进度,来画出进度条的长度
- g.drawRect(px + 1, py + 1, progWidth, _BarHeight - 3);
- data.draw(s);
- return data;
- }
- }
- }
发表评论
-
Flex中使用JSon
2009-10-10 19:58 1091这是我从一位网友里看的例子,发现用Json真的很方便。附件中是 ... -
Flex 嵌入资源
2009-03-03 16:22 1289http://www.adobe.com/cn/devnet/ ... -
Flex中的嵌入资源(Embedding Assets)
2009-03-03 16:19 1319转自:http://hi.baidu.com/sw ... -
如何监听Canvas上滚动条的出现或隐藏 Quick Tip: How to Monitor the
2009-03-03 15:41 1851转自:http://riashanghai.com/zh-ha ... -
Flex中Event与Bindable
2009-03-03 15:37 4122转自:http://liguoliang.com Event: ... -
ResourceBundle用法
2009-03-03 11:18 2996ResourceBundle 用于解释资源文件。 1.新建 ... -
用Point+Graphics画虚线
2009-03-03 10:57 1515Graphics为我们提供了moveTo/lineTo,dra ... -
一个flex例子(自定义download progress bar的)
2009-03-03 10:52 2399预览:http://www.onflex.org/flexap ... -
同一个Column,不同ItemEditor
2009-03-03 10:19 1268这类需求比较少见,不过还是被我碰上了,哈哈。AdvancedD ... -
自定义Flex的Loading界面
2009-02-25 17:37 4616这个方法网上已经有人写过例子... 在这里我只是自己做个实例并 ... -
Flex Metatag
2009-02-25 14:15 1443Have you ever used [Bindable] i ... -
flex:嵌入应用程序资源
2008-12-29 14:56 1136可以在 Adobe® Flex™ 应用程序中嵌入各种类型的资源 ... -
Flex开发自定义控件(基础篇)
2008-12-29 14:53 1421前期准备: 点击File菜单 -> New -> ... -
Flex Cookbook --13.11深度拷贝ArrayCollection
2008-12-29 14:51 222713.11 深度拷贝一个ArrayCollection集合13 ... -
Flex 中的元数据标签
2008-12-29 14:45 1346Flex 元数据标签——告诉编译器如何编译 虽然多数F ... -
Flex Flash 和JAVA 在Socket交互
2008-12-29 14:40 7156首要要了解.两种语言是 ... -
AS3的网页参数处理
2008-12-29 14:36 1244我们一般向网页swf文件传入参数有两种方式,一种是URL如: ... -
Cookie类
2008-12-29 14:36 988[AS3]Cookie类 [AS2]Flash版本的Cooki ... -
Flex学习笔记_09 数据绑定_晋级篇
2008-12-29 14:34 9039.2.1 函数和类级别的绑定 [Bindable]标签打使用 ... -
通过as3.0将文件保存到本地
2008-12-29 14:32 1832在一般情况下,网页上的Flash是不能对客户端的文件进行操作的 ...
相关推荐
美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果
在Flex应用程序开发中,用户首次启动应用时会看到一个加载屏幕,这个屏幕通常被称为预加载器(Preloader)。预加载器的主要目的是显示应用程序加载的进度,同时为用户提供一种视觉反馈,让他们知道程序正在准备运行...
在Flex应用中,"预加载器"(preloader)是程序启动时显示的一个组件,它的主要功能是在用户等待整个应用程序完全加载时提供反馈。预加载器通常会显示一个进度条,以指示应用程序资源的加载进度。 在“flex自定义...
首先,Flex应用程序的启动始于`preloader`阶段,系统管理器(SystemManager)随之创建。SystemManager是Flex应用的核心管理者,它负责应用程序窗口、Application实例、弹出窗口、光标管理,以及ApplicationDomain中的...
首先,`Preloader.as` 是一个常见的Flex组件,它负责在应用程序加载之前显示进度条,提高用户体验。在处理桌面背景这样的任务时,可能用到预加载器来确保所有必要的资源(如图片或皮肤)在改变桌面背景前已完全加载...
在Flex开发中,SystemManager是一个至关重要的核心组件,它扮演着整个应用程序的管理者角色。SystemManager不仅负责控制Flex应用的基本元素,如应用窗口、Application实例、弹出窗口和光标,还负责管理Application...
Flex企业应用开发实战源代码 本书由业界4位拥有近10年企业级应用开发经验的资深专家撰写,权威性毋庸置疑。 全书共分为4大部分,涵盖企业级应用开发的整个生命周期。首先介绍了Flex/Flash的工作机理和利用Flex开发...
- **自定义Preloader**:创建自定义预加载器以增强用户体验。 - **自定义图表组件**:根据业务需求设计和实现定制化的图表组件。 - **高级皮肤专题**:深入探讨如何使用Flex Skin框架为组件创建自定义外观。 - **...
1.1 B/S企业应用开发者的噩梦 1.2 噩梦结束,新时代来临 1.3 Flex概述 1.4 Flash Player的工作模型 1.4.1 Flash Player的帧执行模型 1.4.2 Flash Player渲染模型 1.4.3 Flash中的事件机制 ...
1.1 B/S企业应用开发者的噩梦 1.2 噩梦结束,新时代来临 1.3 Flex概述 1.4 Flash Player的工作模型 1.4.1 Flash Player的帧执行模型 1.4.2 Flash Player渲染模型 1.4.3 Flash中的事件机制 ...
在 Flex 启动过程中,SystemManager 会创建一个加载器(Preloader),用于加载应用程序所需的资源。加载器是一个 2 帧的 MovieClip,第一帧用于创建加载器,第二帧用于加载应用程序。加载器的外观是通过代码绘制的。...
压缩包中的文件名“simple_preloader_2307”可能是一个简单的预加载器(preloader)示例。在Flex应用中,预加载器是加载应用程序的主要组件,它在主应用程序完全加载之前显示进度,以提高用户体验。这个文件可能是用...
Flex应用的根对象是SystemManager,这是一个Display Class,继承自flash.display.MovieClip,使得预加载器(Preloader)和应用程序(Application)可以在两个不同的帧中运行。SystemManager有一个...
在Flex开发中,图片显示是常见的需求,尤其是在创建用户界面或者进行数据可视化时。Flex Builder 3是一款由Adobe推出的集成开发环境(IDE),专门用于构建基于Flex的应用程序。本篇文章将详细探讨如何在Flex Builder...
因此,可以说Flex是Flash的一个高级封装,提供了更丰富的组件库和强大的开发工具,使得开发者能够更高效地构建交互式用户界面。 1、Flex应用程序的生命周期 Flex应用的生命周期与Flash应用有所不同,因为Flex应用...
通过研究和修改这个“BRUSHED METAL PRELOADER”源码,开发者可以学习到如何创建自定义、交互式的预加载器,并将其应用于自己的Flash MX或Flex项目中,提升网站的用户体验。同时,这也是一个深入了解ActionScript...
在网页设计中,预加载器动画(PreLoader Animation)是一种重要的用户体验优化技术,尤其是在处理大容量内容或复杂交互的网站中。预加载器是页面在完全加载之前展示的一个视觉反馈,它告诉用户页面正在准备就绪,...
5. **优化加载**: 为了提高性能,可以利用Flex的模块预加载策略,如使用`Preloader`类来控制模块的加载顺序和时机。同时,可以考虑使用`swfobject`等库来实现渐进式增强,让不支持Flash的用户也能访问部分内容。 6....
网上找了很多都不完整,上传一个工程给大家分享,采用子类加载swf或者gif的方式显示loading ,gif或者swf文件可以随意换成自己喜欢的。...压缩包内容:preloader和button两种方式显示loading fex3源码