ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RecyclerView的左滑实现

2021-05-21 15:53:11  阅读:156  来源: 互联网

标签:左滑 实现 RecyclerView 处理 拦截 方法 我们 view


最终的效果图是这样的

图片
图片

要实现这样的一个效果,用到的关键技术:
自定义view的基本知识+事件处理+其它知识

一.右边的操作view

1.数据的组装

我们可以把右边的操作选项抽象出来数据对象即可,对于老司机的你们一看就懂。

图片
1.SwipeMenuView的简单扩展(自定义view的一种吧)

图片
说白了就是继承LinearLayout 加了一个回调接口,对于老司机的你们一看又懂了。对于SwipeMenuLayout是什么,我们后面会讲的,别着急吗?嘻嘻

二.RecyclerView.Adapter的处理

  • 我们本着在不影响用户原有的adapter的基础上尽量不改或者少改。
    对于RecyclerView的Adapter 我们都是继承RecyclerView.Adapter。

  • 主要是重写onCreateViewHolder和onBindViewHolder方法。

  • 对于onBindViewHolder方法完美不错任何处理,也没有必要做。

  • 主要是onCreateViewHolder方法,这个方法返回是一条item的布局ui,对于我们这个效果在不改动优惠正常的view布局的情况下,我们可以这么做呢????

  • 咦! 我们可以在原来的基础上再套一层FrameLayout. 是的,没错,老司机!!

图片
SwapWrapperUtils.wrap 这个方法这里就不说了就是LayoutInflater加载布局。

三.SwipeMenuLayout-view的设计

继承自FrameLayout

讲用户的itemview这里我们叫Contentview,以及操作view我们叫MenuView,添加到这个FrameLayout上

图片
设置初始状态

我们要测量menuview的宽,高度就是Contentview的高。
我们要布局menuview,在Contentview的右侧。
如图:

图片

图片
控制滑动

在android中根据滑动来控制view有好多种,这里我们用layout方法
主要就是在recycleview滑动时找到其中一条的位置position在ontouch方法中合适的时机将事件传到该view上。什么时候触发这个方法呢
,下文会说recycleview的处理事件。


我们写一个方法将事件传递到此view上来控制menuView和contentView

图片
打开与关闭

借助computeScroll方法来不停的layout设置位置,代码都对于位置的计算有注释,生怕解释不清楚。

图片
三.RecyclerView的时间处理

首先我们要明白一点就是:我们要影响用户原来的item的点击与长按等事件。

我们肯定要重新事件的拦截与处理方法。即onInterceptTouchEvent
与onTouchEvent方法。我们需要在这2个方法里做如下的处理。

  1. 找到按下去的那一条

  2. 什么时候拦截各种down,move,up事件

  3. 处理各种down,move,up事件

找到按下去的那一条

图片
找到了pos位置就可以   View view = getChildAt(mTouchPosition - mFirstPosition);

来获取那个view了,就可以进行事件的处理了。
child.getHitRect方法 ,我们看下sdkapi的注释:

图片
onInterceptTouchEvent 拦截 onTouch的处理 的搞基生活

down拦截的时候:

  1. menuView处于打开且点击的不在menu区域

  2. 达到了滑动的临界值
    这写情况都要交要我们处理,交给ontouch方法

图片
然后在onTouchEven方法里处理down:

图片
move拦截的时候:

达到滑动的临界值就可以拦截了return  true了。

mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();

图片然后在onTouchEven方法里处理move:如果是左右我们才处理,否则拜拜了您。

图片
最后up事件就简单了不需要拦截,无非就是TOUCH_STATE_X状态交给我们之前的SwipeMenuLayout处理打开还是关闭,以及一些变量的初始化。

到此整个实现就完了。

这里只分析一些核心的关键技术,其它的都能看懂。


标签:左滑,实现,RecyclerView,处理,拦截,方法,我们,view
来源: https://blog.51cto.com/u_15127664/2801119

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有