您的位置:首页 > 其它

左滑删除按钮的新思路

2016-05-31 16:02 190 查看
在看了gouyuhua2008的高仿微信对话列表滑动删除效果后,记录下大致的思路。

大概一年半以前有不少app加入了列表项左滑删除的功能,个人觉得这个功能很不错,就试着去写个demo实现了一下。

回忆了一下当时实现的过程,步骤主要有三:

1.重写ListView的拦截事件,在move处判断是左右移动,上下移动,还是点击范围内的移动。判断是上下移动就拦截,否则不拦截,让ItemView去处理事件。

2.在ItemView的OnTouchEvent里处理左右滑动和点击范围内的移动,在Up的时候判断是点击范围内移动则当点击事件处理。

3.通过scroller处理左右滑动,并且在点击的时候回调点击事件。

这样可以解决ListView和ItemView的滑动,并且可以处理单击事件。

但是这样有一个很大的弊端,就是单击事件我是通过在move的时候move的dx和dy很小,此时up我当作单击处理,但是在longClick的时候就得用更麻烦的逻辑去处理。

原因就是处理了滑动冲突,触摸事件被onTouchEvent里消费了,所以ItemView无法处理。

在看了一篇博客后,发现一个新思路。

在ItemView实现一个public方法,后续被ListView调用。

就是所有的触摸事件全都交给ListView中的onTouchEvent去处理。在onTouchEvent通过pointToPosition(x, y)去获得item在列表的位置,但是这个动作需要之前就在adapter的数据对象里保存这个ItemView

这个时候获取到这个ItemView,再对ItemView调用之前实现的方法。

整个过程都是在ListView的onTouchEvent中完成的,所以也不需要去解决什么滑动冲突,而且逻辑很清晰,在ListView中改变了一个Item而已,ViewGroup对子View的改变一样,不涉及事件的分发。

blog代码地址:http://blog.csdn.net/gouyuhua2008/article/details/17584033
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: