背景
仿IOS 实现一个列表项左滑动删除的功能,用一个LinearLayout加上GestureDetector来实现滑动,LinearLayout中的子view添加点击事件,父view的滑动事件与子view点击事件如何优雅的处理?
思路
android 中事件分发机制中,有3个关键的方法,dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent,具体他们如何使用的,以后有空再给大家介绍。
说明:在父类中分发、拦截处理事件,因为在该场景中,可能会扩展多个按钮(与删除并列),为了扩性,由父View统一处理。
首先,在负责消息分发的dispatchTouchEvent中,将消息同时分发给mGestureDetector.onTouchEvent(ev)
其次,在onInterceptTouchEvent中,不拦截down和move事件,只拦截up事件即可,因为up事件是子view是否执行点击操作的关键
最后,在GestureDetector.OnGestureListener.onScoll()方法中判断是否产生滑动,如果滑动了,则拦截up事件;如果没有滑动,则传递up事件到子view,从而长生点击
实现
代码用kotlin写的,17年Google开发者大会强推的语音,语法挺简单的,关键代码如下:
override fun onScroll(e1: Motio