5分鐘過一遍Android事件分發(筆記風)

前言

前幾篇文章我們從源碼的層面分析了事件分發機制...不過感受有些時候仍是須要記一些筆記般的內容,簡單快捷的回憶對應的內容。佈局

正文

佈局嵌套層級:ViewGroupA中嵌套ViewGroupB,而後ViewGroupB嵌套ViewGroupC,ViewGroupC中包含ViewD。學習

基於此,我們分狀況記錄一些狀況:spa

1、C的onInterceptTouchEvent()返回true,onTouchEvent()返回false3d

現象: DOWN走到C的onTouchEvent(),而後逐層回調父View的onTouchEvent(),而且後續MOVE、UP將再也不回調。 code

解讀: DOWN一路下來,由於沒有任何onTouchEvent()返回true,那麼意味着這條分發鏈上沒有任何View消費事件,也就意味着mFirstTouchTarget爲null,所以後續的MOVE、UP事件就不會再從新分發。cdn

2、C的onInterceptTouchEvent()返回false,onTouchEvent()返回trueblog

現象: DOWN一直傳到D,而後調D的onTouchEvent(),C的onTouchEvent()。找到消費事件的C,後續事件正常按ABC的順序調用事件

解讀: 由於不存在任何View攔截,因此事件會一直傳遞至D。而後逐層倒序回調onTouchEvent()來肯定是否有子View消費。而此時咱們的C返回了true,因此着mFirstTouchTarget不爲null,後續事件就交由C去消費。開發

3、C的dispatchTouchEvent()直接返回true,且不主動調用superget

現象: 正常回調AB、但永遠只會回調C的dispatchTouchEvent()

解讀: 父View經過子View的dispatchTouchEvent()的返回值來決定分發權。一旦返回true,意味着找到了消費此事件的View。由於咱們直接返回了true,因此這個對於父View來講mFirstTouchTarget已經確認。後續事件直接分發到此View。

可是由於咱們咱們直接true,且不掉super那意味着onTouchEvent()沒有時機執行...

尾聲

固然可能會有小夥伴說,還有一些狀況呢?但其實萬變不離其宗,你都會唱、跳、RAP了還差打籃球嗎?j你太美就哦了。

我是一個應屆生,最近和朋友們維護了一個公衆號,內容是咱們在從應屆生過渡到開發這一路所踩過的坑,以及咱們一步步學習的記錄,若是感興趣的朋友能夠關注一下,一同加油~

我的公衆號:鹹魚正翻身
相關文章
相關標籤/搜索