简介
在公司做的第一个需求就是给购物车列表加上侧滑删除(真想吐槽这交互),我说可以引入代码家的库,然后他们说项目里有一个了。打开一看,居然是鲍老师的SwipeMenuListView(已经不维护了),而且引入后就一直没更新,满足不了现在的需求,又有业务冲突,正好那段时间看了开发艺术与探索中的事件分发章节,发现只需要在现有的基础上做一些拦截事件就能满足业务了。
问题与需求
- Item的有效滑动区域只有空白区域,也就是说如果item上有别的控件,那么就不能滑动
- 如果列表有header,滑动区域会出错
- 列表里的滑动删除,只有一个能打开
解决方法
问题1、3的解决思路:
1:引起的原因是在down时,down事件被子view获取了。那么解决方案就出来了,在父布局直接判断是否是在横向移动,并且拦截就可以了。
3:在每次down的时候判断一下当前是否有open状态
在onInterceptTouchEvent中处理判断是否需要拦截
onInterceptTouchEvent 的down事件:
在down的时候判断之前是否有一个swiplayout打开的,如果有,就拦截操作。从而解决了问题3。
这里return true后,会由onTouchEvent的MotionEvent.ACTION_DOWN执行,事件流的传递过程就不在这里赘述了。
onInterceptTouchEvent 的move事件:
就是在移动距离超过一个常量值,就可以判断在移动,并拦截。1的问题也得到了解决。
这里return true后,会由onTouchEvent的MotionEvent.ACTION_MOVE执行
2的问题,只需要在onTouchEvent的move事件里减去header就好了。
|
|