从RIACHINA转来的
原文地址:
http://bbs.airia.cn/FLEX/thread-3292-1-1.aspx
效果浏览
http://www.dragonoffspring.cn/preloader/flexpreloaderexample.html
呵呵,看着Jesse Warden的教程来做的
http://jessewarden.com/2007/07/making-a-cooler-preloader-in-flex-part-1-of-3.html
flash里输出的swf实例控制在6k以内,很轻量的。基本不会出现载入preloader时间长的问题。
preloader.as的源码如下,至于swf的fla源文件,可以去Jesse Warden的那个教程里下来自己改动。
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import mx.events.FlexEvent;
import mx.preloaders.DownloadProgressBar;
/**
* This class extends the lightweight DownloadProgressBar class. This class
* uses an embedded Flash 8 MovieClip symbol to show preloading.
*
* @author jessewarden
*
*/
public class Preloader extends DownloadProgressBar
{
/**
* The Flash 8 MovieClip embedded as a Class.
*/
[Embed(source="/assets/flash/myPreloader.swf", symbol="Preloader")]
private var FlashPreloaderSymbol:Class;
private var clip:MovieClip;
private var _preloader:Sprite;
public function Preloader()
{
super();
// instantiate the Flash MovieClip, show it, and stop it.
// Remember, AS2 is removed when you embed SWF's,
// even "stop();", so you have to call it manually if you embed.
this.clip = new FlashPreloaderSymbol();
this.addChild(clip);
this.clip.gotoAndStop("start");
}
public override function set preloader(preloader:Sprite):void
{
preloader.addEventListener( ProgressEvent.PROGRESS , onSWFDownloadProgress );
preloader.addEventListener( Event.COMPLETE , onSWFDownloadComplete );
preloader.addEventListener( FlexEvent.INIT_PROGRESS , onFlexInitProgress );
preloader.addEventListener( FlexEvent.INIT_COMPLETE , onFlexInitComplete );
stage.addEventListener(Event.RESIZE, centerPreloader);
_preloader = preloader;
centerPreloader();
}
/**
* Makes sure that the preloader is centered in the center of the app.
*
*/
private function centerPreloader(event:Event = null):void
{
var adjust_X:Number = 300; // X coodinate adjustion according to Object layout.
var adjust_Y:Number = 500; // Y coodinate adjustion according to Object layout.
x = ((stage.stageWidth+adjust_X) / 2) - (clip.width / 2);
y = ((stage.stageHeight+adjust_Y) / 2) - (clip.height / 2);
}
/**
* As the SWF (frame 2 usually) downloads, this event gets called.
* You can use the values from this event to update your preloader.
* @param event
*
*/
private function onSWFDownloadProgress( event:ProgressEvent ):void
{
var t:Number = event.bytesTotal;
var l:Number = event.bytesLoaded;
var p:Number = Math.round( (l / t) * 100);
clip.preloader.gotoAndStop(p);
clip.preloader.amount_txt.text = String(p);
clip.preloader.amount_txt_img.text = String(p);
}
/**
* When the download of frame 2
* is complete, this event is called.
* This is called before the initializing is done.
* @param event
*
*/
private function onSWFDownloadComplete( event:Event ):void
{
clip.preloader.gotoAndStop(100);
clip.preloader.amount_txt.text = "100";
clip.preloader.amount_txt_img.text = "100";
}
/**
* When Flex starts initilizating your application.
* @param event
*
*/
private function onFlexInitProgress( event:FlexEvent ):void
{
clip.preloader.gotoAndStop(100);
clip.preloader.amount_txt.text = "Init...";
}
/**
* When Flex is done initializing, and ready to run your app,
* this function is called.
*
* You're supposed to dispatch a complete event when you are done.
* I chose not to do this immediately, and instead fade out the
* preloader in the MovieClip. As soon as that is done,
* I then dispatch the event. This gives time for the preloader
* to finish it's animation.
* @param event
*
*/
private function onFlexInitComplete( event:FlexEvent ):void
{
_preloader.removeEventListener( ProgressEvent.PROGRESS , onSWFDownloadProgress );
_preloader.removeEventListener( Event.COMPLETE , onSWFDownloadComplete );
_preloader.removeEventListener( FlexEvent.INIT_PROGRESS , onFlexInitProgress );
_preloader.removeEventListener( FlexEvent.INIT_COMPLETE , onFlexInitComplete );
stage.removeEventListener(Event.RESIZE, centerPreloader);
clip.addFrameScript(21, onDoneAnimating);
clip.gotoAndPlay("fade out");
}
/**
* If the Flash MovieClip is done playing it's animation,
* I stop it and dispatch my event letting Flex know I'm done.
* @param event
*
*/
private function onDoneAnimating():void
{
clip.stop();
dispatchEvent( new Event( Event.COMPLETE ) );
}
}
}
分享到:
相关推荐
自定义的loading,可以代替Flex的默认loading。
flex中文帮助flex中文帮助flex中文帮助flex中文帮助
flex中文帮助文档flex中文帮助文档
在MyEclipse6.0中安装FLEX插件的过程在MyEclipse6.0中安装FLEX插件的过程在MyEclipse6.0中安装FLEX插件的过程在MyEclipse6.0中安装FLEX插件的过程在MyEclipse6.0中安装FLEX插件的过程在MyEclipse6.0中安装FLEX插件的...
flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助...
Flex 标签云 特效 漂亮 Flex 标签云 特效 漂亮
FLEX中文教程+实例
flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等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中文帮助 技术支持: http://www.ZzGps.Cn 技术分享
Flex学习文档,Flex中文文档,,记载了各种学习心得
flex教程 Flex中文基础教程Flex中文基础教程Flex中文基础教程
在Flex中如何使用按钮Button组件进行开发
本文所有资料均来自Flex官方文档,其英文版权归 Adobe公司所有。 均有实例代码讲解
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 Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex ...
FLEX 中文教程 FLEX 通俗易懂