zoukankan      html  css  js  c++  java
  • flex 实现图片播放 方案二 把临时3张图片预加载放入内存

    该方案,是预加载:前一张,当前,下一张图片,一共3张图片放入内存中。这样对内存的消耗可以非常小,加载之后的图片就释放内存。

    下面示例一个是类ImagePlayers,一个是index.mxml

    package
    {
        import flash.display.BitmapData;
        import flash.display.Loader;
        import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.net.URLRequest;
        import flash.utils.Timer;
        
        import mx.collections.ArrayCollection;
        
        import spark.components.Image;
    
        public class ImagePlayers
        {
            private var bitmapDataArrPre:ArrayCollection=new ArrayCollection();
            private var bitmapDataArrPla:ArrayCollection=new ArrayCollection();
            private var bitmapDataArrNex:ArrayCollection=new ArrayCollection();
            
            
            private var playerxh:int=0;
            private var playTimer:Timer;
            
            public var UrlArr:Array=[];
            public  var show:Image;
            public  var play:Image;
            
            public function ImagePlayers()
            {
                playTimer=new Timer(Number(500));
                playTimer.addEventListener(TimerEvent.TIMER, function(evt:TimerEvent):void
                {
                    if (playerxh < (UrlArr.length-1))
                    {
                        nextf();
                    }
                    else
                    {
                        playTimer.stop();
                        
                        play.toolTip="播放"
                        play.source="assets/images/play/play.png";
                    }
                });
            }
            
            public function start():void
            {
                imgLoadPla(UrlArr[0].url);
            }
            
            private function imgLoadPre(url:String):void
            {
                var loader:Loader = new Loader();
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoadedPre);
                loader.load(new URLRequest(url));
            }
            private function imgLoadedPre(e:Event):void
            {
                var _bitmapData:BitmapData = new BitmapData(e.target.width,e.target.height,false);
                _bitmapData.draw(e.target.content);
                
                bitmapDataArrPre.removeAll();
                bitmapDataArrPre.addItem(_bitmapData);
            }
            private function imgLoadPla(url:String):void
            {
                var loader:Loader = new Loader();
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoadedPla);
                loader.load(new URLRequest(url));
            }
            private function imgLoadedPla(e:Event):void
            {
                var _bitmapData:BitmapData = new BitmapData(e.target.width,e.target.height,false);
                _bitmapData.draw(e.target.content);
                
                bitmapDataArrPla.removeAll();
                bitmapDataArrPla.addItem(_bitmapData);
                
                if(playerxh==0)
                {
                    show.source=bitmapDataArrPla[0];
                    imgLoadNex(UrlArr[1].url);
                }
            }
            private function imgLoadNex(url:String):void
            {
                var loader:Loader = new Loader();
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoadedNex);
                loader.load(new URLRequest(url));
            }
            private function imgLoadedNex(e:Event):void
            {
                var _bitmapData:BitmapData = new BitmapData(e.target.width,e.target.height,false);
                _bitmapData.draw(e.target.content);
                
                bitmapDataArrNex.removeAll();
                bitmapDataArrNex.addItem(_bitmapData);
                
            }
            //上一张
            public function pref():void
            {
                if(playerxh>0)
                {
                    bitmapDataArrNex.removeAll();
                    bitmapDataArrNex.addItem(bitmapDataArrPla[0]);
                    
                    bitmapDataArrPla.removeAll();
                    bitmapDataArrPla.addItem(bitmapDataArrPre[0]);
                    
                    playerxh--;
                    if(playerxh!=0)
                    {
                        imgLoadPre(UrlArr[playerxh-1].url);
                    }
                    
                    
                    show.source=bitmapDataArrPla[0];
                }
                
            }
            //下一张
            public function nextf():void
            {
                if(playerxh<(UrlArr.length-1))
                {
                    bitmapDataArrPre.removeAll();
                    bitmapDataArrPre.addItem(bitmapDataArrPla[0]);
                    
                    bitmapDataArrPla.removeAll();
                    bitmapDataArrPla.addItem(bitmapDataArrNex[0]);
                    
                    playerxh++;
                    if(playerxh!=(UrlArr.length-1))
                    {
                        imgLoadNex(UrlArr[playerxh+1].url);
                    }
                    
                    show.source=bitmapDataArrPla[0];
                }
            }
            //播放
            public function playf(delay:Number=500):void
            {
                if(play.toolTip=="播放")
                {
                    play.toolTip="暂停"
                    play.source="assets/images/play/pause.png";
                    if(delay!=playTimer.delay)
                    {
                        playTimer.delay=delay;
                    }
                    playTimer.start();
                }
                else if(play.toolTip=="暂停")
                {
                    play.toolTip="播放"
                    play.source="assets/images/play/play.png";
                    playTimer.stop();
                }
            }
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" 
                    creationComplete="application1_creationCompleteHandler(event)">
        <fx:Script>
            <![CDATA[
                import mx.events.FlexEvent;
                
                private var player:ImagePlayers;
                protected function application1_creationCompleteHandler(event:FlexEvent):void
                {
                    player=new ImagePlayers();
                    player.show=show;
                    player.play=play;
                    
                    for(var i:int=5;i<=15;i++)
                    {
                        player.UrlArr.push({url:"http://192.168.2.9/png/data/pm25/"+Strings(i)+".gif"});
                    }
                    
                    player.start();
                }
                private function Strings(i:int):String
                {
                    if(i<10)
                    {
                        return "00"+i.toString();
                    }
                    if(i<100)
                    {
                        return "0"+i.toString();
                    }
                    return "";
                }
            ]]>
        </fx:Script>
        <fx:Declarations>
            <!-- 将非可视元素(例如服务、值对象)放在此处 -->
        </fx:Declarations>
        <s:VGroup>
            <s:HGroup>
                <s:Image id="play" source="assets/images/play/play.png" toolTip="播放" click="player.playf()" buttonMode="true" useHandCursor="true" />
                <s:Image source="assets/images/play/pre.png" click="player.pref()"  toolTip="上一个" buttonMode="true" useHandCursor="true" />
                <s:Image source="assets/images/play/next.png" click="player.nextf()"  toolTip="下一个" buttonMode="true" useHandCursor="true" />
            </s:HGroup>
            <s:Image id="show"  fillMode="scale" scaleMode="letterbox" smooth="true" smoothingQuality="high"
                     width="1000" height="800" />
        </s:VGroup>
    </s:Application>
  • 相关阅读:
    rowkey设计原则和方法
    ubuntu安装及使用
    sqoop数据迁移
    Hive 自定义UDF操作步骤
    hive之数据导入导出
    MySQL优化
    MongoDB、Redis、elasticSearch、hbase的对比
    数据库基本操作
    count(*) 和 count(1)和count(列名)区别
    BigDecimal的运算——加减乘除
  • 原文地址:https://www.cnblogs.com/tiandi/p/4015481.html
Copyright © 2011-2022 走看看