处理幻灯片动画显示。
其类图如下。
1)SlideshowView
负责处理幻灯片播放的view。
1.1)SlideshowAnimation
其继承自Animation,负责具体幻灯片切换的显示。这里用到两个对象,mPrevAnimation负责上一张图片动画显示,mCurrentAnimation负责当前图片动画显示,显示动画效果就是扩大,淡入淡出。
Animation类的基本用法如下:
1)使用前需要设置每张图片显示周期,使用setDuration()。
2)开始播放,使用start()。
3)calculate()返回单张图片是否在一个周期显示完毕。
1.2)FloatAnimation
与SlideshowAnimation配合,未研究。
1.3)BitmapTexture
存放显示的图片。这里也用到两个对象,mPrevTexture负责存放上一张图片数据,mCurrentTexture负责存放当前图片数据。
2)Slide
负责存放具体相片数据。
3)ShuffleSource
负责生成随机的图片序列。用于随机幻灯片显示图片。
4)SequentialSource
负责生成顺序的图片序列。用于顺序幻灯片显示图片。
3.1.7 PhotoDataAdapter
Photodataadapter属于photopage的数据层,负责在图片数据更新时请求刷新UI。
1)渲染显示各个界面元素的原理
Photopage界面上,显示的元素种类分为三种。完整画面显示的图片,位于图片下方的缩略图图片,可能出现的GIF图片。
Photopage界面上一般存在多个元素,一个完整图片以及很多张缩略图图片,要同时刷新这么多元素,只能多线程,而涉及的线程那么多,最好就是用线程池来管理。简单说,在需要渲染界面元素时,就将该渲染任务丢入线程池中,线程池中若有空闲线程就分配来处理之,没有则该任务挂起,等待一定时间。同时线程池容许存放的任务数有上限。如下图表示线程池处理渲染的原理图。
这里的发起更新图片请求通过updateImageRequests()来实现。
2)数据层与UI层的桥梁
该类保存了一个PhotoView,看其函数调用,很多都是notify开头的,可见该对象主要在这里扮演桥梁的角色。一旦数据更新了,就会经由它通知UI层进行更新,或是一旦UI层变化了了,就经由它通知数据层更新。
各种代码片段如下。
通知UI层更新。
通知数据层更新。
3)ReloadTask
继承自thread。该线程是是与SourceListener共同配合,处理当前显示图片检测到路径不存在时的情形。诸如,在文件管理器或是图库删除此图片时,就会进行该处理,通知界面各元素更新。
4)各种图片元素表示相关类
ImageEntry 类用于表示当前显示的图片。其结构如下:
private static class ImageEntry {
public int requestedBits = 0;
public int rotation;
public BitmapRegionDecoder fullImage;
public Bitmap screenNail;
public Future<Bitmap> screenNailTask;
public Future<BitmapRegionDecoder> fullImageTask;
public boolean failToLoad = false;
// the below members are added for Gif animation
public GifDecoder gifDecoder;
public Future<GifDecoder> gifDecoderTask;
public Bitmap currentGifFrame;
}
FullImageListener用于侦听全屏显示的图片的更新。
ScreenNailListener用于侦听缩略图显示的图片的更新。
ScreenNailJob用于缩略图更新时的具体处理,与ScreenNailListener配合使用。
GifDecoderListener用于侦听GIF图片的更新。
GifAnimation类用于表示当前显示的GIF图片,其结构如下:
private static class GifAnimation {
public ImageEntry entry;
public GifDecoder gifDecoder;
public int animatedIndex;
public int currentFrame;
public int totalFrameCount;
}
GifAnimationRunnable是负责GIF解码显示的runnale类。
5)图片缓存处理相关
要想在图片切换时速度加快,就应该建立一套缓存机制。Gallery 4.0主要通过在保存当前显示图片临近图片元素来实现。如前面所说,图片元素包括,完整画面显示的图片,位于图片下方的缩略图图片,可能出现的GIF图片。对于缩略图图片,IMAGE_CACHE_SIZE限定保存个数,这里是5,其余两种元素各保留一个。
保存图片元素使用ImageFetch,其类定义如下。
private static class ImageFetch {
int indexOffset;
int imageBit;
public ImageFetch(int offset, int bit) {
indexOffset = offset;
imageBit = bit;
}
}
6)图片裁切相关数据处理
相关类是TileImageViewAdapter。
7)DataManager
Mediaset以及mediaitem都用一个64bit的id来标识。高32bit用来标识其与父集的关系,低32bit用来标识本身,其作为私有id。对于mediaset,该私有id是唯一的。对于mediaitem,该私有id在其父集中是唯一的,全局来说并非唯一的。
父集的概念,应该就是文件夹的概念。Mediaitem不能作为其他元素的父集,而mediaset可以作为mediaitem的父集。
Datamanager用于管理mediaset以及mediaitem组成的树状数据结构的类。
8)DataListener
幻灯片播放时图片数据改变等时的侦听者。
虚拟出一个内存盘Z:后,复制下面的内容到记事本,保存为bat后缀名的批处理文件,然后右键,用管理员权限执行即可。顺便说一下,下面文件中的“你的用户名”需修改为你实际的账户名
------------------------------------------------下面是Bat文件内容------------------------------------------------------
点击RSS订阅查看大图:
jQuery就是把我们js常用的方法写到一个框架库里面.
这个是jQuery的官网,大家有时间看一下.
jquery.com
一、jquery的下载
二、加载jquery文件
然后刷新一下。
好,那么学习jquery能达到理解其编程的思想,做到能使用jquery进行常见网页效果开发是我们目前学习的目标。
參考書目就是:《锋利的jQuery》(高清扫描版-有书签)
jQuery在线API:http://api.jquery.com
什么是JavaScript框架库?
普通JavaScript的缺点:每种控件的操作方式不统一,不同浏览器下有区别,要编写跨浏览器的程序非常麻烦。因此出现了很多对JavaScript的封装库。
常见的JavaScript框架库
Prototype【‘pr?ut?.taip 】、YUI、Dojo【’dod?o ,豆粥】、ExtJS、jQuery等,这些库对JavaScript进行了封装,简化了开发。这些库是对JavaScript的封装,内部都是用JavaScript实现的。(联想SQLHelper)
三、新建ASP网站
四、ASP网站为我们加载的内容
jQuery:
jQuery就是JavaScript语法写的一些函数类,内部仍然是调用JavaScript实现的,所以并不是代替JavaScript的。使用jQuery的代码、编写jQuery的扩展插件等仍然需要JavaScript的技术,jQuery本身就是一堆JavaScript函数。
jQuery是最火的JavaScript库,已经被集成到VS2010了,得到了MS的支持,MS的Ajax toolkit和jQuery结合也是最方便,jQuery的扩展插件也是非常多。
jQuery的特点?Write Less,Do More
很好的解决了不同浏览器的兼容问题(IE 6.0+, FF 2+, Safari 3.0+, Opera 9.0+, Chrome)
問題:一般出現問題的時候想想是不是css兼容性的問題。
对于不同控件具有统一的操作方式。
体积小(几十KB)、使用简单方便(Write Less Do More)
链式编程$("#div1").draggble().show().hide().fly() 、隐式迭代
、插件丰富、开源、免费。
让编写JavaScript程序更简单、更强大!
很多功能沒有腫麼辦?到網上搜非常的多。個人寫的插件非常的多。
如果是vs2008版本,沒有智能提示,需要安裝sp1布丁。
VisualStudio 2008SP1下载地址:
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&familyid=27673c47-b3b5-4c67-bd99-84e525b5ce61
再安裝 VS90SP1-KB958502-x86下载地址:
http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736
第三步再把
jquery-1.4.1-vsdoc.js【vs2008下,智能提示需要的文件】
所以推薦大家用vs2010
下面介紹下:jQuery中的顶级对象$
五、引进来
六、顶级对象的另外一种写法
接下來我們寫段小代碼:
七、提示
我先不着急写jQuery代码,我们先看这样一个问题。
八、两个小问题
九、$(document)介绍
十、jq的准备ready事件
十一、window.onload与$(document).ready()的区别
十二、推荐写法
想用jq写window.onload怎么写?
十三、在jq里面调window.load
下面我们看下jquery中的$.map和$.each
十四、jquery中的$.map
十五、map方法的作用
看下map方法内部怎么返回这个函数?
十六、F12看下map内部怎么实现的?
十七、看jq源代码
当我们想用js写点东西,但不会写,可以看看jq中的方法是怎么实现的。这是一种很好的自学方法。
十八、未写数组长度的情况
接下来我们看两个例题.
十九、两道map例题
二十、以前遍历的方法
二十一、调试each
二十二、each遍历键值对
下面看下用each遍历普通数组是什么样的值:
三十三、用each遍历普通数组
大家想一想这为什么使用return false 跳出循环呢?建议设个断点调试一下。
三十四、调试,明白为什么return false
接下来我们看下:jQuery中的trim()
三十五、$.trim
三十六、内部调用了正则
接下来我们看看,jquery对象和Dom对象的转换。
三十七、把dom对象转换为jquery对象