flash开发之加载图片 博客分类: flex
flash的强项就是处理动画。处理动画之前得加载一些前提资源。
加载使用的是Loader这个类。
看一示例,加载一个图片。
flash的加载图片只能加载jpg,gif,png类型,其它类型不能加载。
[SWF(width = "530", height = "510")]
public class BitmapDemo extends Sprite
{
public function BitmapDemo()
{
loadeImage();
}
private function loadeImage():void
{
var loader:Loader = new Loader();
var request:URLRequest = new URLRequest("assets/image/adobe.png");
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
}
protected function onComplete(event:Event):void
{
var loaderInfo:LoaderInfo = event.target as LoaderInfo;
var loader:Loader = loaderInfo.loader;
var bmp:Bitmap = Bitmap(loader.content);
this.addChild(bmp);
}
}
这个示例很是简单。
但有一些疑问。
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
为什么不直接在loader对象上添加监听,而得在contentLoaderInfo上添加
据说这是为了在内容还没有被加载的时候就获得被加载对象的属性:已加载尺寸,总尺寸,标称的宽和高,路径等。
这样的时候
loader.loaderInfo.addEventListener(Event.COMPLETE, onCompletetHandler);
会出错
这样的话却是对的
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompletetHandler);
那contentLoaderInfo和loaderInfo啥关系呢?其实loader的contentLoaderInfo属性是LoaderInfo类的一个实例。而LoaderInfo类是共享与Loader和被加载对象之间共享信息的类。
不过在未加载完成的时候loader.loaderInfo为null
所以在未加载完成之前一定要用loader.contentLoaderInfo
建议加载完成时也用loader.contentLoaderInfo
通过contentLoaderInfo添加下载侦听存在一个问题:加载文件有个时间延迟,在延迟的这段时间内可能已经开始加载别的文件了。所以在侦听到Event.COMPLETE事件的时候,并不知道到底是那个文件完成加载了。这时就需要通过contentLoaderInfof反向得到loader:private function movieLoaded(evt:Event):void { trace(evt.target.loader.name); }