事件分发机制
事件分发机制是 Android 开发者的必备技能,关于这方面的博客也有很多,最近准备夯实一下自己的基础知识,整理一下零散的知识点,为突破做准备,所以再来梳理一下事件分发机制。
大多介绍事件分发机制的文章都只叙述了 View 与 ViewGroup 的事件分发机制,我这里将从 Activity 开始介绍。
一般来说,事件传递的顺序是:Activity -> ViewGroup -> View。
那么我们先说 Activity。
Activity 中的事件分发机制
Activity 中包含两个事件分发与处理的方法:
//事件分发
public boolean dispatchTouchEvent(MotionEvent ev);
//事件消费
public boolean onTouchEvent(MotionEvent event);
我们知道,事件最先是传到 Activity 中,然后在其内部分发之后再传递给ViewGroup 。也就是说 ViewGroup 中的事件上游其实是 Activity,但实际上,ViewGroup 事件的上游不仅仅可以是 Activity,还可以是 Dialog,更进一步的说:ViewGroup 事件的上游是一个 Window。
我这里只介绍 Activity 中的事件分发机制,其它的有兴趣可以自行阅读源码。
首先,Activity 中的事件同样起源于 dispatchTouchEvent 方法:
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
if (getWindow().superDispatchTouchEvent(ev