ItemTouchHelper 实现交互动画

教程大全  / 倒序浏览   ©

#楼主# 2020-2-16

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

01.拖拽需要实现功能

  • 需要实现拖拽的功能如下所示

长按item后拖动,与其他item交换位置
按住item右面的图标后拖动,与其他item交换位置
左滑item变透明并缩小,超出屏幕后,其他item补上
右滑item变透明并缩小,超出屏幕后,其他item补上

02.几个紧张的方法阐明

  • 几个紧张的方法阐明

需要自定义类实现ItemTouchHelper.Callback类,并重写其中几个方法

[	DISCUZ_CODE_0	]

03.简单实现思路

  • 几个方法中代码思路

要想到达上面功能需求,在getMovementFlags方法中,当用户拖拽或者滑动Item的时候需要我们告诉系统滑动或者拖拽的方向,那我们知道支持拖拽和滑动删除的无非就是LinearLayoutManager和GridLayoutManager了,以是可以根据布局管理器的不同做了响应的区分。

在onMove方法中处理拖拽的回调逻辑,那么什么时候被调用?当Item被拖拽排序移动到另一个Item的位置的时候被调用。在onSwiped方法[当Item被滑动删除到不见]中处理被删除后的逻辑。为了降低代码耦合度,可以通过接口listener回调的方式交给外部处理。

  • 上下拖动时与其他item进行位置交换

ItemTouchHelper.Callback本身不具备将两个item互换位置的功能,但RecyclerView可以,我们可以在item拖动的时候把当前item与另一个item的数据位置交换,再调用RecyclerView的notifyItemMoved()方法刷新布局,同时,因为RecyclerView自带item动画,就可以完成上面的交互结果。

  • 左右滑出屏幕时其他item补上

只要在item滑出屏幕时,将对应的数据删掉,再调用RecyclerView的notifyItemRemoved()方法刷新布局即可。

04.拖拽结果上优化

  • 拖拽结果优化

在item被拖拽或侧滑时修改背景色,当动作结束后将背景色恢复回来,而ItemTouchHelper.Callback中正好有对应这两个状态的方法,分别是:onSelectedChanged()、clearView()。那么优化处理其实可以放到这两个方法中处理。

左右滑动使item透明度变浅且缩小该如何实现呢?让item执行了两种属性动画而已,在ItemTouchHelper.Callback中有一个方法可以拿到item被拖拽或滑动时的位移变化,那就是onChildDraw()方法,在该方法中设置item渐变和缩放属性动画。

出现问题,按照上面做法会出现删除后有空白item留出来,那么为什么会出现这种环境呢?并不是多出了两条空白数据,它们是正常的数据,只是看不到了,这是因为RecyclerView条目(itemView)覆用导致的,前面在onChildDraw()方法中对itemView设置了透明和缩小,而一个列表中固定只有几个itemView而已,当那两个透明缩小的itemView被再次使用时,之前设置的透明度和高度比例已经是0,以是就出现了这种环境,解决方法也很简单,只要在item被移除后,将itemView的透明度和高度比例设置回来即可

05.完整代码展示

  • 代码的GitHub地址:github.com/yangchong21…
  • 完整代码如下所示
[	DISCUZ_CODE_1	]
  • 如何使用,代码如下所示
[	DISCUZ_CODE_2	]

在这分享一份整理了2个月的Android进阶面试解析笔记文档,包括了知识点笔记和高频面试问题解析及部分知识点视频讲解给大家!为了不影响阅读,在这以图片展示部分内容于目录截图,有需要的朋友麻烦点赞后点击下面在线链接获取免费领取方式吧!
阿里P6P7【安卓】进阶资料分享+加薪跳槽必备面试题

分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

18888853229

新手猿

  • 主题

    10

  • 帖子

    10

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆