Android事件分发机制

事件分发顺序:
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

Android事件分发流程.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容