该方案,是预加载:前一张,当前,下一张图片,一共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>