PhotoContents
Introduction: // 一个适用于 AbsListView 或者 RecyclerView 的仿朋友圈九宫格控件,针对 View 的复用做了二次缓存,减少创建 View 次数和减少 measure/layout 次数。
Tags:
针对 AbsListView 或者 RecyclerView 来进行 View 的二级缓存,采取的是 adapter 模式以及观察者。
实现原理实际上很简单,大致如下:
众所周知,RecyclerView 或者 AbsListview 的复用机制都是利用一个数组来缓存 view 组,在创建 View 的时候获取出来并传到 adapter 当一个 View 移出屏幕的时候,它会被放到池里面,在下一个 view(viewType 相同)时,会取出 而取出的 View 实际上 childView 等是不变的,因此我们可以利用这个机制,在更新时,将所有 view 都缓存 然后对比出该 view 更新前后的不同进行 addView
又因为我们知道 addView/removeView 会造成 requestLayout 从而重新走了一遍 measure 和 layout,所以为了避免这个情况
我们使用了attachViewToParent和detachAllViewsFromParent这两个仅针对数组操作的方法来避免这个问题。
当然目前来说这个控件还只是一个初步版本,后续如果有时间我会慢慢优化的。
ps,本控件初衷是为了我的另一个项目一起撸个朋友圈吧服务,大部分的更新都会在那里提交,如果您需要获取新的更新信息,可以通过另一个项目获知。
Preview:

Download
Step 1.
Add the dependency
dependencies {
compile 'com.github.razerdp:PhotoContents:{最新版}' //最新版看上方 Jcenter 标签
}
Update log
- 2019/12/10
- 增加复用池拦截器,允许自行添加复用池逻辑
- 2019/07/08
- 重构
- 2017/02/20
- 修复点击后点击空白页面响应了之前的点击事件的问题
