Android4.4 Gallery2图库浅析
来源:互联网 发布:ubuntu和linux的关系 编辑:程序博客网 时间:2024/05/17 23:57
代码路径:
packages\apps\Gallery2。
一.Gallery2的用例图分析
Gallery2主要功能是实现本地存储器、MTP存储器和网络存储器中媒体(图像和视频)的浏览、显示和更多操作(删除、分享、选择和缩放等)。下面用一张简单的用例图描述了Gallery2的功能和职责。
二.Gallery2的状态管理整体架构
Gallery2中总共只有一个Activity,这个Activity就是Gallery。Gallery2是一个多窗口的程序,包含以下四个窗口。
- AlbumSetPage.java(相册缩略图);
- AlbumPage.java(单个相册照片缩略图);
- PhotoPage.java(单张照片);
- ManageCachePage.java(缓存管理);
- SlideShowPage.java(单张滑屏界面);
这四个窗口每个不是完整的Acitity实现的,每个窗口算是只属于Gallery的一个状态。Gallery和每个窗口的类关系图如下。Gallery重新定义了资源上下文接口(GalleryContext类)和窗体接口(GalleryActivity), 并在AbstractGalleryActivity中实现了这两个接口。这样做的目的是为了扩展资源上下文的管理和窗体(Activity)的管理。在AbstractGalleryActivity中实现了一个重要的接口。
public synchronized StateManager getStateManager() { if (mStateManager == null) { mStateManager = new StateManager(this); } return mStateManager; }
这些界面类父类为ActivityState.java,这些界面的切换由StateManager.java负责。StateManager类负责管理所有ActivityState的派生类。
三.Gallery2的窗体切换过程
- Gallery初始化时进入AlbumSetPage(相册缩略图页)。AbstractGalleryActivity类中getStateManager()接口初始化了StateManager实例;Gallery中调用该接口得到StateManager实例,使用StateManager实例的接口public void startState(Class<? extends ActivityState> klass,Bundle data);转入某个状态。例如Gallery初始化时默认将窗口切换到AlbumSetPage(相册缩略图页)。代码如下:
public void startDefaultPage() { ... Bundle data = new Bundle(); data.putString(AlbumSetPage.KEY_MEDIA_PATH, getDataManager().getTopSetPath(DataManager.INCLUDE_ALL)); ... }
- AlbumSetPage(相册缩略图页)点击某个缩略图时,转入到AlbumPage(相片缩略图页)。在AlbumSetPage类的private void pickAlbum(int slotIndex) 函数实现中有这样的代码:
private void pickAlbum(int slotIndex) { ... data.putString(AlbumPage.KEY_MEDIA_PATH, mediaPath); // We only show cluster menu in the first AlbumPage in stack boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class); data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum); //add for DRM feature: pass drm inclusio info to next ActivityState if (IS_DRM_SUPPORTED) { data.putInt(DrmHelper.DRM_INCLUSION, mMtkInclusion); } mActivity.getStateManager().startStateForResult( AlbumPage.class, REQUEST_DO_ANIMATION, data); ///M: avoid show selected icon when back from album page ... }
- AlbumPage(相片缩略图页)点击某张缩略图PhotoPage(单张相片页)。
- 转入SlideshowPage(全屏相册页)。
0 0
- Android4.4 Gallery2图库浅析
- android4.0 的图库Gallery2代码分析(一)
- android4.0 的图库Gallery2代码分析(二)
- Android4.0图库Gallery2代码分析(一) 程序总体结构
- Android4.0图库Gallery2代码分析(一) 程序总体结构
- Android4.0图库Gallery2代码分析(一) 程序总体结构
- Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
- android4.0 的图库Gallery2代码分析(三) 之Applition的初始化准备
- android4.0 的图库Gallery2代码分析(四) 之相册的数据处理以及显示
- Android4.2.2 Gallery2源码分析(4)——GLCanvas.java
- Android4.2.2 Gallery2源码分析(4)——GLCanvas.java
- Android4.4 Camera Gallery2 App之间消息传递分析!
- Android4.4系统从图库选择图片
- android4.4以上调用图库的方法
- android Gallery2 图库放大倍率修改
- android4.4从系统图库无法加载图片的问题
- android4.4从系统图库无法加载图片的问题
- Android4.4从图库选择图片返回的路径不正确
- USACO2.1.5 Hamming Codes (hamming)
- Oracle数据库备份与还原命令
- linux 命令 sync
- USACO2.2.1 Preface Numbering (preface)
- USACO2.2.2 Subset Sums (subset)
- Android4.4 Gallery2图库浅析
- android四大组件之BroadcastReceiver
- LDA相关论文汇总
- USACO2.2.3 Runaround Numbers (runround)
- 栈、堆、进程堆
- javascript之window对象
- USACO2.2.4 Party Lamps (lamps)
- Nginx的ip_hash指令
- LDA