flex 实现图片播放 方案一 图片全部预加载放内存
这种方案,对于web的应用有局限性,在图片量比较多,比较大的时候,就会爆浏览器异常。一般建议轻量级的采用这种方案。
<?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)"
minWidth="955" minHeight="600">
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx"; s|VScrollBar
{
skinClass: ClassReference("com.tianyu.skins.VScrollBarSkin");
}
s|HScrollBar
{
skinClass: ClassReference("com.tianyu.skins.HScrollBarSkin");
}
mx|ScrollBar
{
downArrowUpSkin: ClassReference("com.tianyu.skins.MXScrollBarDownButtonSkin");
downArrowOverSkin: ClassReference("com.tianyu.skins.MXScrollBarDownButtonSkin");
downArrowDownSkin: ClassReference("com.tianyu.skins.MXScrollBarDownButtonSkin");
upArrowUpSkin: ClassReference("com.tianyu.skins.MXScrollBarUpButtonSkin");
upArrowOverSkin: ClassReference("com.tianyu.skins.MXScrollBarUpButtonSkin");
upArrowDownSkin: ClassReference("com.tianyu.skins.MXScrollBarUpButtonSkin");
thumbDownSkin: ClassReference("com.tianyu.skins.MXVScrollBarThumbSkin");
thumbUpSkin: ClassReference("com.tianyu.skins.MXVScrollBarThumbSkin");
thumbOverSkin: ClassReference("com.tianyu.skins.MXVScrollBarThumbSkin");
trackSkin: ClassReference("com.tianyu.skins.MXVScrollBarTrackSkin");
}
</fx:Style>
<fx:Script>
<![CDATA[
import flash.display.Bitmap; import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.CalendarLayoutChangeEvent;
import mx.events.FlexEvent;
import mx.formatters.DateFormatter;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
[Embed(source="images/title.png")]
[Bindable]
private var mainBg:Class;
private var bitmapDataArr:ArrayCollection=new ArrayCollection();
[Bindable]
private var nameArr:ArrayCollection=new ArrayCollection();
private var df:DateFormatter; protected function application1_creationCompleteHandler(event:FlexEvent):void
{
//加载config.xml配置文件
var configService:mx.rpc.http.HTTPService = new HTTPService();
configService.url = "config.xml";
configService.resultFormat = HTTPService.RESULT_FORMAT_TEXT;
configService.addEventListener(ResultEvent.RESULT, configService_resultHandler);
configService.addEventListener(FaultEvent.FAULT, configService_faultHandler);
configService.send(); df=new DateFormatter();
df.formatString="YYYY-MM-DD";
} public var config:XML;
private function configService_resultHandler(event:ResultEvent):void
{
config=new XML(event.result);
remo.endpoint=config.remoteUrl.toString();
remoI.endpoint=config.remoteUrl.toString(); var d:int=Number(config.delay.toString());
bfjg.text=config.delay.toString();
playTimer=new Timer(d);
playTimer.addEventListener(TimerEvent.TIMER, function(evt:TimerEvent):void
{
if (playerxh < (nameArr.length-1))
{
playerxh++;
if(playerxh<bitmapDataArr.length)
{
show.source=new Bitmap(bitmapDataArr[playerxh]);
myList.selectedIndex=playerxh;
myList.scrollToIndex(playerxh);
}
}
else
{
playerxh=0;
show.source=new Bitmap(bitmapDataArr[0]);
myList.selectedIndex=playerxh;
myList.scrollToIndex(playerxh);
playTimer.stop(); play.toolTip="播放"
play.source="images/play.png"; }
}); remo.getListCloundTimes("","");
remo.showBusyCursor = true;
}
private function configService_faultHandler(event:FaultEvent):void
{
Alert.show("加载config配置文件异常,请联系管理员");
} //上一张
private var playerxh:int=0;
private function pref():void
{
if(playerxh>0)
{
playerxh--;
show.source=new Bitmap(bitmapDataArr[playerxh]);
myList.selectedIndex=playerxh;
myList.scrollToIndex(playerxh);
} }
//下一张
private function nextf():void
{
if(playerxh<(nameArr.length-1))
{
playerxh++;
if(playerxh<bitmapDataArr.length)
{
show.source=new Bitmap(bitmapDataArr[playerxh]);
myList.selectedIndex=playerxh;
myList.scrollToIndex(playerxh);
}
}
}
//播放
public var playTimer:Timer;
private function playf():void
{
if(play.toolTip=="播放")
{
play.toolTip="暂停"
play.source="images/pause.png"; var n:int=Number(bfjg.text);
if(n!=playTimer.delay)
{
playTimer.delay=n;
}
playTimer.start();
}
else if(play.toolTip=="暂停")
{
play.toolTip="播放"
play.source="images/play.png";
playTimer.stop();
}
}
private function selectedT():void
{
playerxh=myList.selectedIndex;
if(playerxh<bitmapDataArr.length)
{
show.source=new Bitmap(bitmapDataArr[playerxh]);
myList.scrollToIndex(playerxh);
}
} private function onResult(evt:ResultEvent):void
{
var arr:ArrayCollection=evt.result as ArrayCollection; var dateFormatter:DateFormatter = new DateFormatter();
dateFormatter.formatString = "YYYY年MM月DD日 JJ时NN分"; nameArr.removeAll();
for each(var names:String in arr)
{
var n:String=names.split('.')[0];
if(n.length==12)
{
var y:String=n.substr(0,4);
var m:String=n.substr(4,2);
var d:String=n.substr(6,2);
var j:String=n.substr(8,2);
var nn:String=n.substr(10,2);
var td:String=y+"-"+m+"-"+d+" "+j+":"+nn+":00";
var dd:Date=DateFormatter.parseDateString(td)
var s:String=dateFormatter.format(dd);
nameArr.addItem({label:s,name:names});
}
} if(qssj.text=="")
{
var text2:String=nameArr[nameArr.length-1].label.toString().split("日")[0];
text2=text2.replace("年","-");
text2=text2.replace("月","-");
jssj.text=text2;
last2=text2; var d2:Date=DateFormatter.parseDateString(text2);
var n1:Number=d2.time-1000*60*60*24*3;
qssj.text=df.format(new Date(n1));
last1=qssj.text;
} if(nameArr.length>0)
{
myList.selectedIndex=0; playerxh=0;
loadedXH=0;
bitmapDataArr.removeAll();
loadImage(nameArr[loadedXH].name);
}
else
{
bitmapDataArr.removeAll();
show.source=null;
playerxh=0;
loadedXH=0;
}
}
private var loadedXH:int=0;
private function loadImage(name:String):void
{
remoI.getYTIMage(name);
}
private function onResultI(evt:ResultEvent):void
{
var bytes:ByteArray=evt.result as ByteArray;
imgLoad(bytes);
}
private function imgLoad(bytes:ByteArray):void
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
loader.loadBytes(bytes);
} private var first:Boolean=false;
private function imgLoaded(e:Event):void
{
var _bitmapData:BitmapData = new BitmapData(680,432,true,0x00000000);
_bitmapData.draw(e.target.content); if(loadedXH==0)
{
show.source=new Bitmap(_bitmapData);
}
bitmapDataArr.addItem(_bitmapData); loadedXH++;
if(loadedXH<nameArr.length)
{
loadImage(nameArr[loadedXH].name);
} if(first==false&&loadedXH==20)
{
first=true;
playf()
} }
private function faults(evt:FaultEvent):void
{
Alert.show("后台数据异常,请联系管理员!");
} private var last1:String;
private var last2:String; import mx.controls.DateField;
private function dateChange1():void
{
if(last1!=qssj.text)
{
play.toolTip="播放"
play.source="images/play.png";
playTimer.stop(); var s1:String=qssj.text;
var t1:Date=DateField.stringToDate(s1,"YYYY-MM-DD");
jssj.text=df.format(new Date(t1.time+1000*60*60*24*2)); last1=qssj.text;
last2=jssj.text; var p1:String=s1.split("-").join("")+"0000";
var p2:String=jssj.text.split("-").join("")+"2359"; remo.getListCloundTimes(p1,p2);
remo.showBusyCursor = true;
}
}
private function dateChange2():void
{
if(last2!=jssj.text)
{
play.toolTip="播放"
play.source="images/play.png";
playTimer.stop(); var s2:String=jssj.text;
var t2:Date=DateField.stringToDate(s2,"YYYY-MM-DD");
qssj.text=df.format(new Date(t2.time-1000*60*60*24*2)); last1=qssj.text;
last2=jssj.text; var p1:String=qssj.text.split("-").join("")+"0000";
var p2:String=s2.split("-").join("")+"2359"; remo.getListCloundTimes(p1,p2);
remo.showBusyCursor = true;
}
} ]]>
</fx:Script>
<fx:Declarations>
<!--remo.getListCloundTimes(p1,p2):获取时间列表,remoI.getYTIMage(name):获取图片二进制流-->
<s:RemoteObject id="remo" destination="zfjcRODestination" result="onResult(event)" fault="faults(event)"/>
<s:RemoteObject id="remoI" destination="zfjcRODestination" result="onResultI(event)" fault="faults(event)"/>
</fx:Declarations> <s:BorderContainer borderWeight="2" borderColor="#2187D2">
<s:HGroup gap="0">
<s:BorderContainer borderWeight="1" borderColor="#2187D2">
<s:VGroup gap="0">
<mx:Image id="show"/>
<s:Group height="38" width="680">
<s:Image source="images/banner.png"/>
<s:Image source="images/Pre.png" id="pre" click="pref()" toolTip="上一张"
horizontalCenter="-45" verticalCenter="0" useHandCursor="true" buttonMode="true"/>
<s:Image source="images/play.png" id="play" click="playf()" toolTip="播放"
horizontalCenter="0" verticalCenter="0" useHandCursor="true" buttonMode="true"/>
<s:Image source="images/Next.png" id="next" click="nextf()" toolTip="上一张"
horizontalCenter="45" verticalCenter="0" useHandCursor="true" buttonMode="true"/>
</s:Group>
</s:VGroup>
</s:BorderContainer>
<s:VGroup width="180" gap="0">
<s:Group top="0" left="0" height="33" width="180" right="0">
<s:Rect left="0" right="0" bottom="0" width="100%" height="100%">
<s:fill>
<s:BitmapFill fillMode="repeat" source="{mainBg}"/>
</s:fill>
</s:Rect>
<s:Label left="50" top="10" text="卫星云图" color="#2187D2" fontSize="16" fontWeight="bold" fontFamily="微软雅黑"/>
</s:Group>
<s:HGroup height="30" verticalAlign="middle" paddingLeft="6">
<s:Label text="起始时间:" fontSize="14" fontFamily="微软雅黑" color="#2187D2"/>
<mx:DateField width="100" id="qssj"
yearNavigationEnabled="true" change="dateChange1()"
minYear="2000"
maxYear="2030"
dayNames="['日','一','二','三','四','五','六']"
monthNames="['1','2','3','4','5','6','7','8','9','10','11','12']"
formatString="YYYY-MM-DD" />
</s:HGroup>
<s:HGroup height="30" verticalAlign="middle" paddingLeft="6">
<s:Label text="结束时间:" fontSize="14" fontFamily="微软雅黑" color="#2187D2"/>
<mx:DateField width="100" id="jssj"
yearNavigationEnabled="true" change="dateChange2()"
minYear="2000"
maxYear="2030"
dayNames="['日','一','二','三','四','五','六']"
monthNames="['1','2','3','4','5','6','7','8','9','10','11','12']"
formatString="YYYY-MM-DD" />
</s:HGroup>
<s:HGroup height="30" verticalAlign="middle" paddingLeft="6" gap="3">
<s:Label text="播放间隔:" fontSize="14" fontFamily="微软雅黑" color="#2187D2"/>
<s:TextInput id="bfjg" text="300" width="70"/>
<s:Label text="毫秒" fontSize="14" fontFamily="微软雅黑" color="#2187D2"/>
</s:HGroup> <mx:List id="myList" height="349" width="180" labelField="label"
dataProvider="{nameArr}" change="selectedT()"> </mx:List>
</s:VGroup>
</s:HGroup>
</s:BorderContainer> </s:Application>
flex 实现图片播放 方案一 图片全部预加载放内存的更多相关文章
- flex 实现图片播放 方案二 把临时3张图片预加载放入内存
该方案,是预加载:前一张,当前,下一张图片,一共3张图片放入内存中.这样对内存的消耗可以非常小,加载之后的图片就释放内存. 下面示例一个是类ImagePlayers,一个是index.mxml pac ...
- web前端图片预加载
是什么? 浏览器会缓存静态资源(hmtl/css/img等).图片预加载就是让浏览器提前缓存图片,提升用户体验. 浏览器什么情况下会下载图片? 1,解析到html中img的src属性的时候 2,解析到 ...
- WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放、图片立体轮播、图片倒影立体滚动)效果实现
原文:WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放.图片立体轮播.图片倒影立体滚动)效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...
- Android图片管理组件(双缓存+异步加载)
转自:http://www.oschina.net/code/snippet_219356_18887?p=3#comments ImageManager2这个类具有异步从网络下载图片,从sd读取本地 ...
- 关于图片和auido预加载
预加载老生常谈: funtion preLoadImages(imageArr){ var self = this; var newimages=[], loadedimages=0 var post ...
- Javascript图片预加载详解
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- js图片预加载
图片预加载有大体有几种方式 1.html标签或css加载图片. 显而易见我们使用img标签或者通过标签的background-image属性都可以实现图片的预加载.但是为了避免初次载入过多图片影响体验 ...
- 利用简洁的图片预加载组件提升h5移动页面的用户体验
在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验.抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http ...
- Javascript实现图片预加载【回调函数,多张图片】
使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多张图片预加载代码.当接二连三的案例中都涉及图片预加载时,就 ...
随机推荐
- CenOS下安装Memcache和PHP Memcache扩展.
I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 yum install libevent-devel 2.安装memcac ...
- Git使用技巧(2)-- 基本操作
常用 Git 命令清单 作者: 阮一峰 编辑更新:shifu204 日期: 2016年9月 1日 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练 ...
- [已解决]windows下python3.x与python2.7共存版本pip使用报错问题
> 由于最近要更新插件,突然发现没法使用pip来安装升级插件,查了一圈才找到解决办法,特记录在此,便于其它人查询. 报错信息如下: Fatal error in launcher: Unable ...
- 离散数学及其应用(Discrete Mathematica With Application 7th)学习笔记 第一章
目前本人只进行到了第五章的章末补充练习,应该是从4月6号开始学习的,又是英文版,而且基本就下班回家抽2个小时左右去学,所以进度较慢. 由于本质是数学,除了一些程序处理和大计算量的问题,基本上一本草稿本 ...
- 寒城攻略:Listo 教你用Swift 语言编写 IOS 平台流媒体播放器
先展示播放器效果: 依然继承 Listo 本人的强迫症,还是从最初到完毕完整的写一个攻略来记录一下,这里声明 Listo 本人也是看了非常多的戴维营攻略才总结分享给大家这一篇攻略的. 首先,Lis ...
- linux tableau server 连接 presto
记录一下这个弄个好久的难题 linux tableau server 版本 tableau-server-2018-2-0.x86_64.rpm 安装过程 我参照了这儿仁兄 http://ju. ...
- ios UICollectionView reloadData无法更新的奇怪问题。
报错 Assertion failure in -[UICollectionViewData invalidateItemsAtIndexPaths:] 近来偶尔用到UICollectionVi ...
- Laravel创建模型
laravel中创建模型 <?php /** * Created by PhpStorm. * 新建模型 * User: chuang * Date: 17-1-15 * Time: 上午9:1 ...
- PHPCMS 前台移用地区联动数据
在PHPCMS中,有时候需要建立模型有地区联动,这个联动数据在这前台调用显示呢?今天清源就给大家介绍一下! 地区联动菜单的缓存文件是 caches\caches_linkage\caches_dat ...
- linux 文本编辑器
文本编辑器 文本编辑器是Linux操作系统中的重要工具.其中,VI是使用最广泛的文本编辑器,其可以在任何shell中使用.此外,Red Hat Enterprise Linux6 还提供了gedit工 ...