内容倒是挺丰富的,不过有几个细节需要注意下,避免误人。
1.事件首先不是传递到activity而是先传递到DecorView的,DecorView中的dispatchTouchEvent里面会调用mWindow.getCallback(). dispatchTouchEvent(ev)(这个callback实际上就是当前activity,见Activity中的attach()方法内mWindow.setCallback(this)),然后才到你文中说的七点。
2.
/**
* 源码分析:Activity.dispatchTouchEvent()
*/
public boolean dispatchTouchEvent(MotionEvent ev) {
// 仅贴出核心代码
// ->>分析1
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
// 若getWindow().superDispatchTouchEvent(ev)的返回true
// 则Activity.dispatchTouchEvent()就返回true,则方法结束。即 :该点击事件停止往下传递 & 事件传递过程结束
// 否则:继续往下调用Activity.onTouchEvent
}
// ->>分析3
return onTouchEvent(ev);
}
if()条件内的注释部分:返回true不是停止事件往下传递,而是事件在向下传递的过程中被消费而终止传递。看起来差不多实际上对新手会存在误导。😂
Android事件分发机制详解:史上最全面、最易懂前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问...