Skip to content

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

razerdp/PhotoContents

Repository files navigation

朋友圈图片容器

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
    • 修复点击后点击空白页面响应了之前的点击事件的问题

About

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

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages