说到gif,目前很多Android软件都具备了该功能,比如新浪微博。在Android 2.3平台中,系统自带的图片查看应用是Gallery3D,其并不具有播放gif图片的功能。Gallery3D是一家叫做cooliris公司制作的一款Android图片浏览应用,因其具备3D特效,因此称之为Gallery3D,这也与Android自带的Gallery区分开。想了解更多关于Gallery3D的信息可以查看这里。个人觉得,其实Android 2.3中的Gallery3D还是很复杂的,也是很值得研究的,本次只是因为工作原因涉及到其冰山一角,特留此笔记以备忘。

欢迎转载,请务必注明出处:http://blog.csdn.net/yihongyuelan

对于gif的添加,文章会大致分成三个部分:

(1)概要;主要涉及Gallery3D基础知识。

(2)显示图片流程;主要涉及缩略图和大图的显示。

(3)代码框架。给Gallery3D添加gif支持,使之能够正常播放。

文章的目的很简单,一方面给自己留作笔记,另一方面作为回顾。文中并不会对Gallery3D展开去将,主要是围绕主线"添加gif支持",因此很多地方可能并不是那么详细,也有可能我自己也没弄清楚的,文章的结尾我将给出一些参考资料,有兴趣研究的朋友可以自己参考并学习。

GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。(来自百度百科)

Gallery3D的界面生成和普通的应用程序不一样。Gallery3D的界面是通过openGL画出来的,整个界面在一个Activity中,如主界面,缩略图界面,单张图片查看界面,标记界面等都属于同一个Activity。

Gallery3D从整体上来讲,具有两种模式:标记模式以及普通模式。标记模式也就是多选模式,包括了:主界面标记模式,缩略界面矩阵浏览标记模式,缩略图界面分类浏览时标记模式3个界面。普通模式包括:主界面浏览模式,缩略图矩阵浏览模式,查看界面模式,缩略图界面分类浏览模式。听起来有点绕口,图1比较清晰的展示了Gallery3D中的基本模式,如图1:

Android 2.3 Gallery3D添加gif支持——概要(一)_第1张图片

图 1

下面是Gallery3D的基本组件,包括:

com.cooliris.media.GridLayer :网格缩略图和个体图片展示
com.cooliris.media.BackgroundLayer:Gallery3D背景
com.cooliris.media.HudLayer:相册展示
com.cooliris.media.ImageButton:图片按钮
com.cooliris.media.TimeBar:Gallery3D中下方可拖动的悬浮控件
com.cooliris.media.MenuBar :点击图片时弹出菜单按钮
com.cooliris.media.PopupMenu:弹出菜单项
com.cooliris.media.PathBarLayer:显示路径控件

如图2所示:

Android 2.3 Gallery3D添加gif支持——概要(一)_第2张图片Android 2.3 Gallery3D添加gif支持——概要(一)_第3张图片Android 2.3 Gallery3D添加gif支持——概要(一)_第4张图片Android 2.3 Gallery3D添加gif支持——概要(一)_第5张图片

图 2

Gallery3D的大致工作流程:


1.Cache的创建。

Gallery3D中的CacheService也会对这些媒体文件进行缩略图的创建,SD卡上图片缩略图粗放路径/mnt/sdcard/Android/data/com.cooliris.media/中,这里保存的并不是一张张的缩略图片,而是cache文件。(注:当插入SD卡后,MediaScanner会对SD卡进行扫面,并将扫描到的媒体文件的各种属性存入数据库中(data/data/com.android.providers.media/databases/external-xxxxx.db),同时MediaScanner会生成扫描到的媒体文件的缩略图,存放在/sdcard/DCIM/.thumnails 下面,这个是平台生成的,供一些需要使用它的app通过mediastore去调用)


2.缩略图显示。

在Gallery3D中,缩略图是显示在一个个固定宽高(在GridLayer中设定)的方框中,从数据库中获取图片信息(CacheService.getImageList),然后用OpenGL将缩略图画到画布上去,CacheService中的refresh()方法负责建立相册并把图片放到相册中。


3.大图片显示。

大图片的显示,就是当我们点击一张缩略图时显示的图片。具体方法是根据数据库中图片的路径找到对应SD卡中的图片,然后把图片加载到cache块中(CacheCrc64(Item.mFlie)方法把路径转换成cacheid),其中的mFile即是图片在SD卡中的路径(从数据库找到存入Item中),而这个mFiled对应的缓存块的设置是在writeItemsToCache()方法中(另外还有一个writeSetsToCache方法)。最后调用了GridDrawManager.drawFocusItems()来绘制图片,并最终显示到界面上。

以上流程只是Gallery3D工作流程的极小一部分,本文主要目的是大致了解Gallery3D。文章结尾处给出部分网友的分析,根据这些信息加上自己跟踪代码得到了以上结论,如有不正之处还恳请指正。


Gallery3D工作流程:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=40903&extra=&highlight=&page=1

Gallery3D介绍:http://blog.sina.com.cn/s/blog_972577b301010qmj.htmlhttp://blog.csdn.net/hopesjd/article/details/7716410

Cache处理流程: http://www.eoeandroid.com/thread-41920-1-1.html

Gallery3D源码分析汇总(推荐): http://wenku.baidu.com/view/25ecc9d87f1922791688e8fc.html

更多相关文章

  1. android开发--界面的布局
  2. Android UI开发专题(一) 之界面设计(http://www.android123.com.
  3. Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片
  4. Android开发本地及网络Mp3音乐播放器(三)MainActivity(主界面)
  5. Android沉浸式状态栏+图片背景+标题栏渐变+背景伸缩
  6. Android--高效地加载大图片
  7. Android画圆角矩形图片,并在图片上写字
  8. 定制android启动界面
  9. Android ProgressBar自定义图片进度,自定义渐变色进度条

随机推荐

  1. Android(安卓)基础Action
  2. android实现文件下载功能
  3. Android布局之LinearLayout与RelativeLay
  4. Android 滑动效果高级篇(七)—— 华丽翻页
  5. Android五大布局(一)LinearLayout.FrameLay
  6. Android(安卓)UI开发第五篇――自定义列
  7. Android 无须获取Root权限静默安装App
  8. Android 操作SQLite数据库之一
  9. Android沉浸式标题栏状态栏字体颜色修改(
  10. Android Canvas绘图详解(图文)