2016-10-13 00:16:48 点击量:6 标签: 收藏本文
你可能会说“我的目的很简单,我只是要加载一张图片,用渐进的方式边加载边显示,我可不知道哪里有一串字符串让我去加载。嗯,来看看这个类吧,ByteLoader继承Loader类,使用方法跟Loader类一样简单。
原理是:
用URLStream类去加载图片数据流,
然后用帧循环stream.readBytes(data, data.length)将数据读入ByteArray中;
同时在帧循环中卸载Loader中旧的数据,加载新的数据super.unload();super.loadBytes(data);
代码如下:
- package {
- import flash.events.EventDispatcher;
- import flash.events.ProgressEvent;
- import flash.events.Event;
- import flash.utils.ByteArray;
- import flash.net.URLStream;
- import flash.net.URLRequest;
- import flash.display.Loader;
- public class ByteLoader extends Loader{
- public var url:String;
- public var data:ByteArray;
- private var stream:URLStream;
- public function ByteLoader(url:String = ""){
- if(url != ""){
- loadUrl(url);
- }
- }
- //CuPlayer.com 加载
- public function loadUrl(_url:String):void{
- url = _url;
- data = new ByteArray;
- stream = new URLStream;
- stream.load(new URLRequest(url));
- stream.addEventListener(Event.COMPLETE,completeFun);
- stream.addEventListener(ProgressEvent.PROGRESS,progressFun);
- addEventListener(Event.ENTER_FRAME,loaddata);
- }
- private function loaddata(e:Event):void{
- if (stream.bytesAvailable > 0){
- stream.readBytes(data, data.length);
- }
- if (data.length > 0){
- super.unload();
- super.loadBytes(data);
- }
- }
- // CuPlayer.com 加载中
- private function progressFun(erogressEvent):void{
- if(stream.bytesAvailable == 0) return;
- dispatchEvent(e);
- trace(e.bytesLoaded);
- }
- //CuPlayer.com 加载完成
- private function completeFun(e:Event):void{
- stream.removeEventListener(Event.COMPLETE,completeFun);
- stream.removeEventListener(ProgressEvent.PROGRESS,progressFun);
- dispatchEvent(e);
- this.closeStream();
- }
- //CuPlayer.com 清除数据
- public function closeStream():void{
- if (stream){
- if (stream.connected) stream.close();
- }
- if (hasEventListener(Event.ENTER_FRAME)){
- removeEventListener(Event.ENTER_FRAME, loaddata);
- }
- }
- }
- }
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室