事件分发顺序:
Activity --》 ViewGroup --》 View
一般Android事件都是在用户按下屏幕时产生,也就是ACTION_DOWN被触发,之后就会触发重要的三分方法
1️⃣dispatchTouchEvent()
当点击事件产生后,事件首先会传递给当前的 Activity,这会调用 Activity 的 dispatchTouchEvent() 方法
在源码中会调用 getWindow().superDispatchTouchEvent() 方法,由于Window是个抽象类,实际调用的是
PhoneWindows.superDispatchTouchEvent() 方法,然后调用DecorView的superDispatchTouchEvent(),
DecorView继承FrameLayout,所以说当一个事件产生,最终会调用ViewGroup的superDispatchTouchEvent()方法
2️⃣onInterceptTouchEvent()
onInterceptTouchEvent()方法主要是用来判断事件是否需要拦截,默认是不对事件进行拦截的,返回值为false,
所以当我们需要ViewGroup来进行事件消费时,我们需要重写此方式,返回true
在这个方面里面,我们需要对子View进行遍历,来判断点击区域是在哪一个View区域内,再调用子View的dispatchTouchEvent()方法
2️⃣onTouchEvent()
只要 View 的 CLICKABLE 和 LONG_CLICKABLE 有一个为 true,那么 onTouchEvent() 就会返回 true 消耗这个事件
onTouch()、onTouchEvent()和onClick()的优先级?
onTouch --》onTouchEvent --》onClick