PhotoContents

Introduction: // 一个适用于 AbsListView 或者 RecyclerView 的仿朋友圈九宫格控件,针对 View 的复用做了二次缓存,减少创建 View 次数和减少 measure/layout 次数。
More: Author   ReportBugs   
Tags:

Download

针对 AbsListView 或者 RecyclerView 来进行 View 的二级缓存,采取的是 adapter 模式以及观察者。

实现原理实际上很简单,大致如下:

众所周知,RecyclerView 或者 AbsListview 的复用机制都是利用一个数组来缓存 view 组,在创建 View 的时候获取出来并传到 adapter 当一个 View 移出屏幕的时候,它会被放到池里面,在下一个 view(viewType 相同)时,会取出 而取出的 View 实际上 childView 等是不变的,因此我们可以利用这个机制,在更新时,将所有 view 都缓存 然后对比出该 view 更新前后的不同进行 addView

又因为我们知道 addView/removeView 会造成 requestLayout 从而重新走了一遍 measure 和 layout,所以为了避免这个情况 我们使用了attachViewToParentdetachAllViewsFromParent这两个仅针对数组操作的方法来避免这个问题。

当然目前来说这个控件还只是一个初步版本,后续如果有时间我会慢慢优化的。

ps,本控件初衷是为了我的另一个项目一起撸个朋友圈吧服务,大部分的更新都会在那里提交,如果您需要获取新的更新信息,可以通过另一个项目获知。

Preview:

Download Download

Step 1.

Add the dependency

    dependencies {
            compile 'com.github.razerdp:PhotoContents:{最新版}'  //最新版看上方 Jcenter 标签
    }

Update log

  • 2019/12/10
    • 增加复用池拦截器,允许自行添加复用池逻辑
  • 2019/07/08
    • 重构
  • 2017/02/20
    • 修复点击后点击空白页面响应了之前的点击事件的问题
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools