美文网首页
如何实现一个简单的RecyclerView

如何实现一个简单的RecyclerView

作者: DrChenZeng | 来源:发表于2020-03-19 11:13 被阅读0次

    解释一下:

    在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

          本文链接:https://www.haomeiwen.com/subject/fmqyictx.html