• Flash中图片的逐步加载


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

    package 
    {
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.events.ContextMenuEvent;
        import flash.events.Event;
        import flash.net.URLRequest;
        import flash.net.URLStream;
        import flash.ui.ContextMenu;
        import flash.ui.ContextMenuItem;
        import flash.utils.ByteArray;
        import flash.utils.getTimer;
        public class Main extends Sprite 
        {
            private var _loader:Loader = new Loader();
            private var _urlstream:URLStream = new URLStream();
            private var _data:ByteArray = new ByteArray();
            public function Main():void 
            {
                var loadmenu:ContextMenuItem = new ContextMenuItem("Load image");
                loadmenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, this.onLoadImage, false);
                this.contextMenu = new ContextMenu();
                this.contextMenu.customItems.push(loadmenu);
                
                _urlstream.addEventListener('progress', processData);
                _urlstream.addEventListener('complete', processData);
                
                addChild(_loader);
                
                stage.align = StageAlign.TOP_LEFT;
            }
            public function onLoadImage(e:Event):void
            {
                _loader.unload();
                _data.length = 0;
                var url:String = "http://files.cnblogs.com/Greatest/test.jpg.zip";
                _urlstream.load(new URLRequest(url + "?q=" + getTimer()))
            }
            public function processData(e:Event):void
            {
                var oldlen:int = _data.length;
                _urlstream.readBytes(_data, _data.length);
                if (_data.length > oldlen)
                {
                    _loader.loadBytes(_data);
                }
            }
        }
    }

     还可以参考这个封装:http://bbs.9ria.com/thread-150069-1-1.html

  • 相关阅读:
    使用 Apache OpenJPA 开发 EJB 3.0 应用,第 3 部分: 实体继承
    使用 Apache OpenJPA 开发 EJB 3.0 应用,第 2 部分: 开发第一个 Open JPA 应用
    使用 Apache OpenJPA 开发 EJB 3.0 应用,第 6 部分: 处理实体生命周期事件的回调
    http://www.oschina.net/question/129540_20547
    tomcat6实现远程调试
    FluorineFx和Flex配置
    今天才开通这个博客呀!
    vue中install方法
    Vue.nextTick 的原理和用途
    vue3.0中使用nextTick
  • 原文地址:https://www.cnblogs.com/fuland/p/4442219.html
Copyright © 2020-2023  润新知