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>

 

你可能感兴趣的:(Flex)