Android事件傳遞順序

事件傳遞順序

我們假設(shè)在一個(gè)activity中有一個(gè)ViewGroup,ViewGroup中有一個(gè)TextView精肃。</br>

image.png

我們?cè)O(shè)置不同層級(jí)的不同事件攔截方法的返回值秤涩,每此觸控TextView區(qū)域來觀察事件的傳遞情況司抱。監(jiān)聽方法有:

  • Activity的dispatchTouchEvent和onTouchEvent

  • ViewGroup的dispatchTouchEvent,onInterceptTouchEvent和onTouchEvent

  • TextView的dispatchTouchEvent和onTouchEvent

一共7個(gè)方法,如果下面展示的打印日志沒有出現(xiàn)状植,說明沒有調(diào)用

默認(rèn)事件傳遞順序


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ ViewGroup onInterceptTouchEvent: down 

     ↓ TextView dispatchTouchEvent down 

     ↓ TextView onTouchEvent down 

     ↓ ViewGroup onTouchEvent: down 

     ↓ Activity onTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity onTouchEvent move 

     ↓ Activity dispatchTouchEvent up 

     ↓ Activity onTouchEvent up

Activity的dispatchTouchEvent中返回true


     ↓ Activity dispatchTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity dispatchTouchEvent up

Activity的dispatchTouchEvent中返回false


     ↓ Activity dispatchTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity dispatchTouchEvent up

ViewGroup dispatchTouchEvent中返回true


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ Activity dispatchTouchEvent move 

     ↓ ViewGroup dispatchTouchEvent: move 

     ↓ Activity dispatchTouchEvent up 

     ↓ ViewGroup dispatchTouchEvent: up

ViewGroup dispatchTouchEvent中返回false


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ Activity onTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity onTouchEvent move 

     ↓ Activity dispatchTouchEvent up 

     ↓ Activity onTouchEvent up

ViewGroup onInterceptTouchEvent中返回true


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ ViewGroup onInterceptTouchEvent: down 

     ↓ ViewGroup onTouchEvent: down 

     ↓ Activity onTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity onTouchEvent move 

     ↓ Activity dispatchTouchEvent up 

     ↓ Activity onTouchEvent up

ViewGroup onInterceptTouchEvent中返回true 并且 onTouchEvent返回true


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ ViewGroup onInterceptTouchEvent: down 

     ↓ ViewGroup onTouchEvent: down 

     ↓ Activity dispatchTouchEvent move 

     ↓ ViewGroup dispatchTouchEvent: move 

     ↓ ViewGroup onTouchEvent: move 

     ↓ Activity dispatchTouchEvent up 

     ↓ ViewGroup dispatchTouchEvent: up 

     ↓ ViewGroup onTouchEvent: up

ViewGroup onInterceptTouchEvent中返回false


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ ViewGroup onInterceptTouchEvent: down 

     ↓ TextView dispatchTouchEvent down 

     ↓ TextView onTouchEvent down 

     ↓ ViewGroup onTouchEvent: down 

     ↓ Activity onTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity onTouchEvent move 

     ↓ Activity dispatchTouchEvent up 

     ↓ Activity onTouchEvent up

TextView dispatchTouchEvent返回true


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ ViewGroup onInterceptTouchEvent: down 

     ↓ TextView dispatchTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ ViewGroup dispatchTouchEvent: move 

     ↓ ViewGroup onInterceptTouchEvent: move 

     ↓ TextView dispatchTouchEvent move 

     ↓ Activity dispatchTouchEvent up 

     ↓ ViewGroup dispatchTouchEvent: up 

     ↓ ViewGroup onInterceptTouchEvent: up 

     ↓ TextView dispatchTouchEvent up

TextView dispatchTouchEvent返回false


     ↓ Activity dispatchTouchEvent down 

     ↓ ViewGroup dispatchTouchEvent: down 

     ↓ ViewGroup onInterceptTouchEvent: down 

     ↓ TextView dispatchTouchEvent down 

     ↓ ViewGroup onTouchEvent: down 

     ↓ Activity onTouchEvent down 

     ↓ Activity dispatchTouchEvent move 

     ↓ Activity onTouchEvent move 

     ↓ Activity dispatchTouchEvent up 

     ↓ Activity onTouchEvent up

總結(jié)

image.png
  • 首先說明振定,這個(gè)統(tǒng)計(jì)數(shù)據(jù)是我根據(jù)demo手動(dòng)修改返回值打印日志所得肉拓,過程可能存在疏忽或遺漏,如有錯(cuò)誤,還望指正卑惜。

  • Activity的dispatchTouchEvent方法中,不論返回true或false更米,都表示消費(fèi)事件,事件不會(huì)向下傳遞征峦。

  • 在默認(rèn)情況下消请,ViewGroup的onInterceptTouchEvent方法返回super和返回false效果是一樣的

  • Activity或ViewGroup的onTouchEvent方法不靠譜栏笆,很可能被自己或下面View/ViewGroup攔截下來臊泰,只有沒有任何攔截時(shí),才會(huì)調(diào)用此方法缸逃。

  • 在down事件中针饥,ViewGroup的onInterceptTouchEvent方法返回true察滑,但是onTouchEvent不返回true的話修肠,接下來的move up等事件,將不會(huì)再傳遞進(jìn)進(jìn)來嵌施,如果onTouchEvent返回true的話,后續(xù)事件才會(huì)傳遞進(jìn)來吗伤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市巢块,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌族奢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越走,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡廊敌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門锅纺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肋殴,你說我怎么就攤上這事伞广√鄣纾” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵蔽豺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我沧侥,道長(zhǎng),這世上最難降的妖魔是什么宴杀? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮旺罢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扁达。我一直安慰自己蠢熄,他們只是感情好跪解,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布叉讥。 她就那樣靜靜地躺著饥追,像睡著了一般图仓。 火紅的嫁衣襯著肌膚如雪判耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天帚豪,我揣著相機(jī)與錄音碳竟,去河邊找鬼狸臣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诈泼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铐达,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼檬果,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了选脊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤偏灿,失蹤者是張志新(化名)和其女友劉穎钝的,沒想到半個(gè)月后翁垂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扁藕,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了望薄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痕支,死狀恐怖蛮原,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤花嘶,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布椭员,位于F島的核電站车海,受9級(jí)特大地震影響隘击,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埋同,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望留量。 院中可真熱鬧哟冬,春花似錦楼熄、人聲如沸浩峡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至平斩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绘面,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工揭璃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亭罪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓情组,卻偏偏與公主長(zhǎng)得像燥筷,于是被迫代替她去往敵國和親院崇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容