左滑删除按钮的新思路

在看了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
阅读更多
上一篇Android如何绘制视图,解释了为何onMeasure有时要调用多次
下一篇Android拦截的一点其他理解
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭