Google Gallery for Android 4.4源码分析以及主UI修改——Gallery整体结构

最近在做原生Gallery的UI修改和和功能改进工作,所以大约半个月的工作,终于对Gallery的主UI部分有了一定了解,对Gallery的整体结构有了一定认识。在修改的过程中遇到了各种各样的坑,好在UI修改部分的工作已经接近尾声,下一阶段主要是新功能的添加。

常言道:好记性不如烂笔头。所以将Gallery相关的内容做一次细致的梳理,相信这对同样做系统原生应用的同学也能有所帮助。


一、Gallery的UI结构

Gallery的相册,图片流,单张图片虽然看上去是不同的页面,但是都是在同一个Activity上绘制的,这个Activity就是Gallery的入口GalleryActivity。

相册对应AlbumSetPage,图片流对应AlbumPage、单张照片对应PhotoPage。

这三个Page的具体内容都继承自GLView,这个View继承自OpenGL。

也就是说,Gallery的主要界面是绘制的,那么修改UI的时候也主要是修改绘制UI的代码。

在AlbumPage中的注释给出了他们的关系:

// This are the transitions we want:
    //
    // +--------+           +------------+    +-------+    +----------+
    // | Camera |---------->| Fullscreen |--->| Album |--->| AlbumSet |
    // |  View  | thumbnail |   Photo    | up | Page  | up |   Page   |
    // +--------+           +------------+    +-------+    +----------+
    //     ^                      |               |            ^  |
    //     |                      |               |            |  |         close
    //     +----------back--------+               +----back----+  +--back->  app
    //

二、Gallery的page管理机制

Gallery在页面的实现没有使用android自己的Activity,而是使用了OpenGL。所以需要对Page进行管理。在这部分可以比较清晰的看到页面是如果被管理的,阅读这部分代码可以帮助理解Android的Activity管理机制。

Gallery引入了StateManager类对Page进行管理。

在这个类中,提供了诸如startState()方法、startStateForResult()方法等以及menu相关的方法,类似于Activity的startActivity()、startActivityForResult()方法。

三个Page都继承ActivityState类,这个类用于实现模拟了生命周期方法,和ActionBar的获取。

而真正的生命周期方法则由这个类中使用的AbstractGalleryActivity()提供,这是一个Activity的子类。


三、SlotVIew

SlotView是Gallery相册和照片流两个页面的显示内容的条目。

slotVIew由三个部分组成,显示缩略图的Content,显示文件夹名称、数目、文件夹icon的Label,以及由选择时的蓝色效果、相片文件夹上的相机icon组成的图层。

SlotVIew各个部分的大小、颜色、字体、padding、margin等都由Config.java来管理,

并通过AlbumSetSlotRenderer、AlbumSlotRenderer两个类中的renderSlot()方法进行渲染。


通过以上三个部分就把Gallery的UI统一起来了。


根据以上提及的类和方法可以相对轻松的理清GalleryUI的主要逻辑。


四、关于Gallery的一些想法

Gallery的代码自从android 2.*以来就没有什么太大的变化,除了将Gallery3d改成Gallery之外似乎就没什么了。正是由于Gallery年代久远,才保留了Gallery代码上接近系统代码得特征。

做这种系统应用的好处就是能对Android的一些机制由更好的理解,坏处也很明显,跟现在的主流APP开发流程脱节。

现在流行的MVP模式和它的几个实现库什么的做系统应用是接触不到的。在编程的过程中,领导一再要求避免使用第三方代码,因为要避免可能的法律风险。所以一切都是Android APP最原始的状态。


五、附

这里给出一个Gallery的MVC架构图:



图片来自:http://blog.csdn.net/weihan1314/article/details/38588821




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值