闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash loading教程>列表

[渐进式加载]大话Loader.loadBytes

[来源:www.adspark.org | 作者:Catfly | 时间:2010-02-01 | 点击:  | 收藏本文  【 】]
5uflash文章摘要:第一话:加载Base64 encoded string 通过加载Base64 string创建图片。没错,就像你看到的,加载一个字符串也可以生成图片,当然不是说图片url是字符串(废话!),图片数据就在字符串中。 问题的关键是需要这么一个类Base64,它的converToByteArray方法可以把字符串转化
第一话:加载Base64 encoded string
通过加载Base64 string创建图片。没错,就像你看到的,加载一个字符串也可以生成图片,当然不是说图片url是字符串(废话!),图片数据就在字符串中。
问题的关键是需要这么一个类Base64,它的converToByteArray方法可以把字符串转化为ByteArray,有了ByteArray数据,我们就可以生成图片了。
代码如下:

文件出处:Loading Image using Loader.loadBytes()
  1. //http://www.motobit.com/util/base64-decoder-encoder.asp
  2. //你可以在线把一张小图片转为base64 string,把字符串粘贴到这里赋值给变量str
  3. //过些天做个有输入框的实例,可以把你得到的字符串粘到里面,生成图片
  4. var str:String = "";
  5. var byteArr:ByteArray = Base64.converToByteArray(str);

  6. var loaderoader = new Loader();
  7. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
  8. loader.loadBytes(byteArr);

  9. function onImageLoaded(e:Event):void{
  10.         addChild(loader);
  11.         trace(loader.width + " : " + loader.height);
  12. }
复制代码
第二话:简单渐进式加载图片类ByteLoader
上面只是为了给大家开开眼界,不表。你可能会说“我的目的很简单,我只是要加载一张图片,用渐进的方式边加载边显示,我可不知道哪里有一串字符串让我去加载。”
嗯,来看看这个类吧,ByteLoader继承Loader类,使用方法跟Loader类一样简单。
原理是:
  • 用URLStream类去加载图片数据流,
  • 然后用帧循环stream.readBytes(data, data.length)将数据读入ByteArray中;
  • 同时在帧循环中卸载Loader中旧的数据,加载新的数据super.unload();super.loadBytes(data);
代码如下:
  1. package {
  2.         import flash.events.EventDispatcher;
  3.         import flash.events.ProgressEvent;
  4.         import flash.events.Event;
  5.         import flash.utils.ByteArray;
  6.         import flash.net.URLStream;
  7.         import flash.net.URLRequest;
  8.         import flash.display.Loader;

  9.         public class ByteLoader extends Loader{
  10.                 public var url:String;
  11.                 public var data:ByteArray;
  12.                 private var stream:URLStream;

  13.                 public function ByteLoader(url:String = ""){
  14.                         if(url != ""){
  15.                                 loadUrl(url);
  16.                         }
  17.                 }
  18.                 //加载
  19.                 public function loadUrl(_url:String):void{
  20.                         url = _url;
  21.                         data = new ByteArray;
  22.                         stream = new URLStream;
  23.                         stream.load(new URLRequest(url));
  24.                         stream.addEventListener(Event.COMPLETE,completeFun);
  25.                         stream.addEventListener(ProgressEvent.PROGRESS,progressFun);

  26.                         addEventListener(Event.ENTER_FRAME,loaddata);
  27.                 }
  28.                 private function loaddata(e:Event):void{
  29.                         if (stream.bytesAvailable > 0){
  30.                                 stream.readBytes(data, data.length);
  31.                         }
  32.                         if (data.length > 0){
  33.                                 super.unload();
  34.                                 super.loadBytes(data);
  35.                         }
  36.                 }
  37.                 //加载中
  38.                 private function progressFun(erogressEvent):void{
  39.                         if(stream.bytesAvailable == 0) return;

  40.                         dispatchEvent(e);
  41.                         trace(e.bytesLoaded);
  42.                 }
  43.                 //加载完成
  44.                 private function completeFun(e:Event):void{
  45.                         stream.removeEventListener(Event.COMPLETE,completeFun);
  46.                         stream.removeEventListener(ProgressEvent.PROGRESS,progressFun);

  47.                         dispatchEvent(e);
  48.                         this.closeStream();
  49.                 }
  50.                 //清除数据
  51.                 public function closeStream():void{
  52.                         if (stream){
  53.                                 if (stream.connected) stream.close();
  54.                         }
  55.                         if (hasEventListener(Event.ENTER_FRAME)){
  56.                                 removeEventListener(Event.ENTER_FRAME, loaddata);
  57.                         }
  58.                 }

  59.         }
  60. }
复制代码
第三话:更周详的渐进式加载类ProgressiveLoader
原文件出处:ProgressiveLoader 渐进式加载图像
这个类,核心跟我上面那个ByteLoader类是一样的。只是这个类作了更多的考虑,也重写了父类Loader的几个方法。原文有个实例,大家可以去看看。
原代码,好长啊!自己下载吧。
Base64类也有得下载
文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:特别的文字跳动loading
下一篇:没有了
>>> 最新评论:(共有 0 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  Flash 3d
  相关文章
·[渐进式加载]大话Loader.loadByt
·特别的文字跳动loading
·flash打造水杯里的水纹效果
·Flash进度条的制作详细讲解(组图
·Flash基础理论课:制作Loading思
·Flash打造美女影片指导进度条
·简单的flash播放进度控制条
·flash进度控制条
·即拷即用的loading代码
·详谈flash Loading教程
  热门文章
·Flash进度条的制作详细讲解(组图)
·Flex 3 AdvancedDataGrid的使用(第二
·全Flash动画网站实现的基础教学
·FLASH+XML相册(附源码)
·FLV播放器汇总
·flash幻灯片网页效果
·超酷flash光晕移动效果
·Flash打造简单的飘雪动画视觉特效
·flash水影效果字
·flash春雷闪电效果
·Flash制作大雪纷飞效果动画
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号