- dispatchTouchEvent():分发事件
- onIntercepteTouchEvent():拦截事件
- onTouchEvent():处理事件
1、当一个事件发生时,事件首先会传递到Activity的dispatchTouchEvent()方法中,而每一个Activity都持有一个Window对象,但是Window是一个抽象类,这里的Window指的就是PhoneWindow,它是在Activity的attach()方法中创建出来的,所以Activity的dispatchTouchEvent()方法又会调用PhoneWindow的superDispatchTouchEvent()方法
2、PhoneWindow又持有一个DecorView,DecorView与Window的关联是在ActivityThread创建Activity的时候,会将DecorView加入到Window里面,从而建立关联。Activity的setContentView()方法,其实就是调用PhoneWindow的setContentView()方法,通过LayoutInflater.inflate()方法将对应的xml布局转换为View并加入到DecorView中
3、DecorView继承于FrameLayout,FrameLayout又继承于ViewGroup,所以PhoneWindow的superDispatchTouchEvent()方法最终会调用ViewGroup的dispatchTouchEvent()方法,自上而下一层一层去进行事件分发
4、如果在自上而下的事件分发过程中,某个View想处理该事件,那么就会调用其onInterceptTouchEvent()方法去进行事件拦截,然后通过其onTouchEvent()方法去处理该事件,如果传递到了最底层的View还是没有处理该事件,那么会由下而上依次传递,最终传递到Activity中,Activity的onTouchEvent方法会被调用