Flash中图片的逐步加载

下面的flash,单击右键菜单中选“Load image”看演示。

在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  }

你可能感兴趣的:(Flash)