如何实现一个简单的RecyclerView

解释一下:

在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

你可能感兴趣的:(如何实现一个简单的RecyclerView)