gallery2
来源:互联网 发布:ipad和手机同时上淘宝 编辑:程序博客网 时间:2024/05/17 09:07
1 数据管理:
DataManager(管理数据源)- MediaSource(管理数据集) - MediaSet(管理数据项) -MediaObject(管理单个图片) 。
DataManager中初始化所有的数据源(LocalSource, PicasaSource, MtpSource, ComboSource,ClusterSource, FilterSource, UriSource, SnailSource),将数据源放到一个Hash表中,提供存取操作。 这些数据源都是继承自:MediaSource
1 MediaSource
本身不是一个数据集只负责管理数据集,以LoacalSource为例,从他的createMediaObject函数可以看出,根据路径他可以创建出LocalAlbumSet,LocalAlbum, LocalImage,LocalVideo等。
其中LocalAlbumSet,LocalAlbum 继承自:MediaSet 负责管理数据项的。而LocalImage继承自 LocalMediaItem 最终继承MediaObject 是负责管理单个数据的。即单个image 或video。
MediaSet负责管理数据项MediaItem以及其他MediaObject。这里的 MediaSet和MediaObject 就像是 layout和view的关系一样,里面可以有许多个view但本身也是一个view
下面看下 几个重要的数据层次上几个类的作用:
MediaObject 主要负责判断是否支持 剪切,放大,全屏显示,删除等操作以及相应的操作的声明
MediaItem 在MediaObject基础上 增加了获取图片的名字,模式,旋转角度,大小等信息。
MediaSet 可以包含 MediaItem也可以包含 MediaSet 除了管理 数据集应有的获取 包含的个数 等加入了 同步加载数据相关的处理操作。
MediaSource 这个类除了负责 对数据集合的管理外,最主要的功能是 控制数据的流程 在显示, 隐藏的时候会对数据进行相应的处理。
这个里面相较 MediaSet 增加了 添加数据项的功能。
另外还有一个数据集是负责管理 所有数据集的。DataManager
DataManager 会一开始对所有的数据集进行初始化,并对数据进行同意操作
到这里整个数据就结束了
2 接下来看下流程
DataManager .initializeSourceMap() ----addSource(new LocalSource(mApplication));---应用开始的时候 调用回调方法 resume() --- source.resume();下面
进入了 LocalSource的 resume();回调里面。这时开始初始化 数据库数据,得到ContentProviderClient 数据查询的句柄。这时数据就准备好了,接下来就等待
数据的显示以及其他更多操作了。
再来看下 数据显示 : 也是这里: 加载进相应的MediaSet,并显示,使用他们的回调方法进行各自的操作。结束。很简单,简单的前提是设计。没有这么好的设计
怎么能这么简单就就操作出来了呢。如果想看到一个从开始到结束的完整流程,需要结合界面显示来分析。
二
gallery2 的界面显示类主要有以下几个:
AlbumSetPage.java(相册缩略图);
AlbumPage.java(单个相册照片缩略图);
PhotoPage.java(单张照片);
SlideShowPage.java(幻灯片界面);
这些界面类父类为ActivityState.java;这些界面的切换由StateManager.java负责。这些 ActivityState 可以 类比 fragment 相应的 activity 内部类 FragmentManagerImpl 类比 StateManager
接下来就来跟以下:
Gallery.java ---oncreate() ---- startDefaultPage() ----getStateManager().startState(AlbumSetPage.class, data);
这样的话就会调到 AlbumSetPage 这个类比较普通,我们找个特殊点的,这样可以跟到更多内容:
SlideShowPage 这个是个幻灯片界面。而且在和camera交互的时候就是这个类负责显示camera里面的内容。
SlideshowView.oncreate() -----initializeViews();-----mRootPane.addComponent(mSlideshowView);
setContentPane(mRootPane); 这写方法,可以类比 activity里面 iew的初始化: layout.addview() setcontentview(layout);
在来看一条流程: oncreate()----- initializeData(data); ----- mediaSet = mActivity.getDataManager().getMediaSet(mediaPath,
mDrmInclusion);
mModel = new SlideshowDataAdapter(mActivity, new SequentialSource(mediaSet, repeat),
index, path);
数据传进来 对SlideshowDataAdapter进行初始化。SlideshowDataAdapter就是对这些数据进行操作的类。这样的话以后对数据的操作转化为对 SlideshowDataAdapter的操作
在具体的就不分析了,
这样的话就开始 DataManager 初始化自己然后开始显示 相应的mediaset 显示给用户。
下面来详细看下 view的绘制过程。
基本流程: GLview ----GLRootview----AlbumSetPage 这样一个调用过程。
AlbumSetPage.setContentPane-----mActivity.getGLRoot().setContentPane(mContentPane);
即是:GLRootView.setContentPane(mContentPane);---------mContentView.render(mCanvas);
mContentView实在AlbumSetPage里面实现的:GLView mRootPane = new GLView()
掉用suerper().render()。这个方法就相当于view.draw() 了。结了
- gallery2
- Gallery2:FAQ
- 修改Gallery2记录
- Gallery2修改记录
- android gallery2 源码分析
- Gallery2添加删除图标
- Gallery2中的view显示
- Android Gallery2源码分析
- Android Gallery2流程分析
- Gallery2图片编辑随笔
- Gallery2里PHP支持gettext
- surfaceview导致gallery2内存泄露
- Gallery2中Menu的分析
- Android4.4 Gallery2图库浅析
- bug-Gallery2-menu-No1-20160818
- Gallery2源码阅读图片编辑
- Android 4.x Gallery2分析
- Android 6.0 Gallery2 eclispe编译
- 如何适配denisty>2的android设备
- DP背包之01背包、完全背包、多重背包笔记
- MySQL如何记录binlog
- Inflater方法和findViewById()
- 相对布局管理器
- gallery2
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules 问题解决方案
- Unable to install this application because an application with the same identity is already installe
- 线程的一些知识
- 工作遇到问题之解决方法
- CSDN 的博客到此为止了,中止!
- [Redis] redis-cli 命令总结
- acm--小球自由下落问题
- android有关paint属性设置 .