首页 > 代码库 > flex 实现图片播放 方案二 把临时3张图片预加载放入内存

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 = http://www.mamicode.com/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 = http://www.mamicode.com/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 = http://www.mamicode.com/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>

 

flex 实现图片播放 方案二 把临时3张图片预加载放入内存