左滑删除按钮的新思路
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
大概一年半以前有不少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
相关文章推荐
- HBuilder工作空间修改
- Codeforces Round #353 (Div. 2) E. Trains and Statistic
- dubbo fastJson
- rabbitmq+ keepalived+haproxy高可用集群详细命令
- 轻松创建nodejs服务器(1):一个简单nodejs服务器例子
- java判断部署项目使用的服务器类型
- JS内置对象
- 通过html5的range属性动态改变图片的大小
- Middle-题目40:162. Find Peak Element
- 关于编译与链接具体内容及头文件与源文件区别的理解
- 分数运算符重载(3)
- 101. Symmetric Tree
- Middle-题目39:73. Set Matrix Zeroes
- 1006. Sign In and Sign Out (25)
- 第13周项目2—动物这样叫2
- Jquery 插件学习笔记
- Html解析器HtmlAgilityPack
- 函数
- 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所
- PAT上面一道关于“月饼”的题目的解法