flash中利用Loader.loadBytes方法和URLStream类实现图片的逐步加载

本文介绍如何使用Flash的Loader和URLStream类实现一边下载一边显示图片的功能。通过监听URLStream的进度事件,逐步将接收到的数据传递给Loader,实现渐进式加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Flash中,有Loader类,可以从外部载入一张图片(或swf文件)。但是有个不好的地方就是,不像浏览器那样一边下载一边显示。
所幸的是,Flash提供了Loader.loadBytes方法和URLStream类。
首先,要使用URLStream类,而不是URLLoader。它们的区别就是URLLoader需要等到所有的数据下载完成之后,才能获取。而URLStream可以一边下载,一边就可以取到数据了。
其次,Loader.loadBytes,可以直接发送数据给Loader,而不是让Loader去下载。每一次loadBytes,Loader都会丢弃以前的数据,所以在代码中使用了_data的ByteArray保存数据。
代码如下:

 1 package 
 2 {
 3     import flash.display.Loader;
 4     import flash.display.Sprite;
 5     import flash.display.StageAlign;
 6     import flash.events.ContextMenuEvent;
 7     import flash.events.Event;
 8     import flash.net.URLRequest;
 9     import flash.net.URLStream;
10     import flash.ui.ContextMenu;
11     import flash.ui.ContextMenuItem;
12     import flash.utils.ByteArray;
13     import flash.utils.getTimer;
14     public class Main extends Sprite 
15     {
16         private var _loader:Loader = new Loader();
17         private var _urlstream:URLStream = new URLStream();
18         private var _data:ByteArray = new ByteArray();
19         public function Main():void 
20         {
21             var loadmenu:ContextMenuItem = new ContextMenuItem("Load image");
22             loadmenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, this.onLoadImage, false);
23             this.contextMenu = new ContextMenu();
24             this.contextMenu.customItems.push(loadmenu);
25             
26             _urlstream.addEventListener('progress', processData);
27             _urlstream.addEventListener('complete', processData);
28             
29             addChild(_loader);
30             
31             stage.align = StageAlign.TOP_LEFT;
32         }
33         public function onLoadImage(e:Event):void
34         {
35             _loader.unload();
36             _data.length = 0;
37             var url:String = "http://files.cnblogs.com/Greatest/test.jpg.zip";
38             _urlstream.load(new URLRequest(url + "?q=" + getTimer()))
39         }
40         public function processData(e:Event):void
41         {
42             var oldlen:int = _data.length;
43             _urlstream.readBytes(_data, _data.length);
44             if (_data.length > oldlen)
45             {
46                 _loader.loadBytes(_data);
47             }
48         }
49     }
50 }
from:http://www.xker.com/page/e2009/1006/80637.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值