解释一下:
在recyclerView 上面扩展一些迷之动画还是特别难的(例如:支付宝的银行卡页面
),所以实现一个recyclerView 并不是花里胡哨的炫技操作。
设计:
- item三级缓存可以去掉或者是尽量简化。
- LayoutManager 可以去掉(
功能写在本体里面,反正可以随便改
)。 - Adapter 肯定要有
- 滑动和惯性滑动也要有
如何实现:
自己实现是不可能的,recyclerview太复杂了,说实话我也搞不定。看别人的代码,把他实现recyclerView 功能的部分剔出来:
https://github.com/loopeer/CardStackView
滑动实现
-
自定义CardStackView 继承viewGroup
public class CardStackView extends ViewGroup { public CardStackView(Context context) { this(context, null); } public CardStackView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CardStackView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr, 0);//初始化一堆 } }
-
onMeasure 来一堆测试高度相关(
得到显示区域高度,itemView实际总占用高度
) -
onLayout 来一堆位置布局(
计算itemView在本体中的相对位置并设置
) -
onInterceptTouchEvent 中拦截滑动操作
-
onTouchEvent 中处理滑动操作(
得到滑动距离计算后,对itemView实时布局进行改变
)
数据显示(adapter)实现
- adapter 给 recylerview 提供ViewHolder,实现子itemView的新建和刷新。
- adapter 调用notifyDataSetChanged() 通知ReyclerView 刷新ViewHolder。
ReyclerView 和 adapter 之间如何交互刷新?
缺少的只是一个观察者:(ViewDataObserver)RecyclerViewDataObserver
下面是简单实现的示例图:
image提取后的代码:
https://github.com/drchengit/SimpleRecyclerView
网友评论