这个方法网上已经有人写过例子...
在这里我只是自己做个实例并记录一下..
首先~自定义Flex加载的原理其实就是继承mx.preloaders.DownloadProgressBar类..然后重写相关的方法..
01.
package
02.
{
03.
import
flash.display.*;
04.
import
flash.events.*;
05.
import
flash.net.*;
06.
import
flash.text.TextField;
07.
import
flash.text.TextFormat;
08.
09.
import
mx.events.FlexEvent;
10.
import
mx.preloaders.DownloadProgressBar;
11.
12.
public
class
LoadingExampleProgressBar
extends
DownloadProgressBar
13.
{
14.
private
var
logo:Loader;
15.
private
var
txt:TextField;
16.
private
var
_preloader:Sprite;
17.
public
function
LoadingExampleProgressBar()
18.
{
19.
logo =
new
Loader();
20.
logo.load(
new
URLRequest(
"l4cd.png"
));
21.
addChild(logo);
22.
23.
var
style:TextFormat =
new
TextFormat(
null
,
null
,
0xFFFFFF
,
null
,
null
,
null
,
null
,
null
,
"center"
);
24.
txt =
new
TextField();
25.
txt.defaultTextFormat = style;
26.
txt.width =
200
;
27.
txt.selectable =
false
;
28.
txt.height =
20
;
29.
addChild(txt);
30.
31.
super
();
32.
}
33.
//最重要的代码就在这里..重写preloader,让swf执行加载的时候~进行你希望的操作~
34.
override
public
function
set
preloader(value:Sprite):
void
{
35.
_preloader = value
36.
//四个侦听~分别是 加载进度 / 加载完毕 / 初始化进度 / 初始化完毕
37.
_preloader.addEventListener(ProgressEvent.PROGRESS,load_progress);
38.
_preloader.addEventListener(Event.COMPLETE,load_complete);
39.
_preloader.addEventListener(FlexEvent.INIT_PROGRESS,init_progress);
40.
_preloader.addEventListener(FlexEvent.INIT_COMPLETE,init_complete);
41.
42.
stage.addEventListener(Event.RESIZE,resize)
43.
resize(
null
);
44.
}
45.
private
function
remove():
void
{
46.
_preloader.removeEventListener(ProgressEvent.PROGRESS,load_progress);
47.
_preloader.removeEventListener(Event.COMPLETE,load_complete);
48.
_preloader.removeEventListener(FlexEvent.INIT_PROGRESS,init_progress);
49.
_preloader.removeEventListener(FlexEvent.INIT_COMPLETE,init_complete);
50.
stage.removeEventListener(Event.RESIZE,resize)
51.
}
52.
private
function
resize(e:Event):
void
{
53.
logo.x = (stage.stageWidth -
40
)/
2
;
54.
logo.y = (stage.stageHeight -
80
)/
2
;
55.
txt.x = (stage.stageWidth -
200
)/
2
;
56.
txt.y = logo.y +
40
+
5
;
57.
58.
graphics.clear();
59.
graphics.beginFill(
0x333333
);
60.
graphics.drawRect(
0
,
0
,stage.stageWidth,stage.stageHeight);
61.
graphics.endFill();
62.
}
63.
private
function
load_progress(e:ProgressEvent):
void
{
64.
txt.text =
"正在加载..."
+
int
(e.bytesLoaded/e.bytesTotal*
100
)+
"%"
;
65.
}
66.
private
function
load_complete(e:Event):
void
{
67.
txt.text =
"加载完毕!"
68.
}
69.
private
function
init_progress(e:FlexEvent):
void
{
70.
txt.text =
"正在初始化..."
71.
}
72.
private
function
init_complete(e:FlexEvent):
void
{
73.
txt.text =
"初始化完毕!"
74.
remove()
75.
//最后这个地方需要dpe一个Event.COMPLETE事件..表示加载完毕让swf继续操作~
76.
dispatchEvent(
new
Event(Event.COMPLETE))
77.
}
78.
}
79.
}
自定义了加载类后..我们新建一个app测试一下..
1.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
2.
<mx:Application xmlns:mx=
"http://www.adobe.com/2006/mxml"
layout=
"absolute"
3.
preloader=
"LoadingExampleProgressBar"
4.
backgroundGradientAlphas=
"[1.0, 1.0]"
backgroundGradientColors=
"[#333333, #333333]"
>
5.
</mx:Application>
6.
//请自行增加一“大”体积的东西..必放到网上去测试...