內(nèi)容倒是挺豐富的,不過有幾個細(xì)節(jié)需要注意下,避免誤人。
1.事件首先不是傳遞到activity而是先傳遞到DecorView的,DecorView中的dispatchTouchEvent里面會調(diào)用mWindow.getCallback(). dispatchTouchEvent(ev)(這個callback實際上就是當(dāng)前activity,見Activity中的attach()方法內(nèi)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,則方法結(jié)束。即 :該點擊事件停止往下傳遞 & 事件傳遞過程結(jié)束
// 否則:繼續(xù)往下調(diào)用Activity.onTouchEvent
}
// ->>分析3
return onTouchEvent(ev);
}
if()條件內(nèi)的注釋部分:返回true不是停止事件往下傳遞,而是事件在向下傳遞的過程中被消費(fèi)而終止傳遞??雌饋聿畈欢鄬嶋H上對新手會存在誤導(dǎo)。??
Android事件分發(fā)機(jī)制詳解:史上最全面、最易懂前言 Android事件分發(fā)機(jī)制是Android開發(fā)者必須了解的基礎(chǔ) 網(wǎng)上有大量關(guān)于Android事件分發(fā)機(jī)制的文章,但存在一些問題:內(nèi)容不全、思路不清晰、無源碼分析、簡單問...