分发脉络图
点击事件分为四件:down、move、up、cancel,前三个是我们要关注的
事件分成层次分为四层:Activity、ViewGroup、View
涉及的方法分为三个:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent
分发规律
- Activty通过return super.dispatchTouchEvent()向下分发事件,无论return false/true都会消费事件
- ViewGroup会收到Activity传下来的事件,通过onInterceptTouchEvent返回值检查是否向下传递,若返回值为ture则调用VewGroup的onTouch,且不将事件不向下传递。
- 传递则需要返回false或super.dispatchTouchEvent
- 若onTouch返回false表示事件没有被消费,接着到onTouchEvent,其中会触发click监听器
- 若onInterceptTouchEvent返回false也会传递到子view
- 子view收到事件后,可通过super.dispatchTouchEvent调用view自身的onTouchEvent,也可返回false调用ViewGroup的onTouchEvent
- move和up事件,则是会传递到down被拦截的组件,调用对应注解的onTouch事件或父view的