一步步探索學(xué)習Android Touch事件分發(fā)傳遞機制(二)

前言

1. 探究的內(nèi)容
  • 在上一篇文章《一步步探索學(xué)習Android Touch事件分發(fā)傳遞機制(一)》中,已經(jīng)以ACTION_DOWN事件為例,對Android系統(tǒng)的Touch事件分發(fā)傳遞機制做了探究喷橙,并得出了形象好記憶的結(jié)論。

  • 這篇文章所探究的問題是與上一篇文章緊密相關(guān)的皂贩,如果對Android Touch事件分發(fā)傳遞機制還不太了解的同學(xué)罐寨,建議先去看看上一篇文章《一步步探索學(xué)習Android Touch事件分發(fā)傳遞機制(一)》

  • 我們知道,一個操作胰锌,比如一個點擊事件骗绕,是由多個不同TYPE的MOTION_EVENT組成的。for example资昧,點擊事件是由一個ACTION_DOWN事件和一個ACTION_UP事件組成的酬土。那么諸如ACTION_UP和ACTION_MOVE事件是不是跟ACTION_DOWN事件一樣遵循相同的分發(fā)規(guī)律呢?

  • 事實上格带,答案是否定的撤缴。 ACTION_UP和ACTION_MOVE事件的分發(fā)傳遞流程與這之前的ACTION_DOWN事件如何傳遞以及在哪里被消費有密不可分的聯(lián)系。具體我們下面一步步探索了解叽唱。

2. 探究的方法
  • 我們還是繼續(xù)以上一篇文章《一步步探索學(xué)習Android Touch事件分發(fā)傳遞機制(一)》中所寫的Demo為例子屈呕,一步步打Log,去探究整個事件的傳遞流程棺亭,再用繪圖描述他的機制虎眨。

  • 當然知其然須知其所以然,對于Android源碼的分析镶摘,將會在下一篇文章《一步步探索學(xué)習Android Touch事件分發(fā)傳遞機制(三)》中分析嗽桩。


Demo中見分曉

1.Demo代碼
**2.打Log,找規(guī)律涝缝,識機制 **

1. )所有方法(dispatchTouchEvent(); onInterceptTouchEvent(); onTouchEvent() )都return super的情況:**

  • 首先扑庞,我們保持所有方法都return super,當然這個我上一篇文章探究過拒逮,ACTION_DOWN事件會以類U型的傳遞路線在View樹中分發(fā)傳遞罐氨。

  • 那么ACTION_UP和ACTION_MOVE事件呢?這里以ACTION_UP事件為例做探究滩援。(事實上岂昭,Action_move事件與Action_up事件是遵循類似規(guī)律的。)我對著Demo屏幕中的View做一個點擊操作(前面交代過狠怨,點擊事件是由一個ACTION_DOWN事件和一個ACTION_UP事件組成的)约啊。

  • 打log:


    這里寫圖片描述

    注:上圖中,紫色框內(nèi)的是點擊事件的ACTION_DOWN的分發(fā)流程佣赖;綠色框中的是點擊事件的ACTION_UP事件的分發(fā)流程恰矩。后面的圖同理。

  • 規(guī)律:可以看到憎蛤,ACTION_UP事件并沒有按照類U型的結(jié)構(gòu)去在View樹傳遞外傅,而是直接在Activity的onTouchEvent方法中消費掉了纪吮。

  • 繪圖如下:


    這里寫圖片描述

2. )ViewGroup2的dispatchTouchEvent() return true的情況:**

  • 然后我們來探究ACTION_DOWN事件在dispatchTouchEvent()中被消費掉的情況下,ACTION_UP事件是怎么傳遞分發(fā)的萎胰。

  • 令ViewGroup2的dispatchTouchEvent() return true碾盟,打log:

    這里寫圖片描述

  • 規(guī)律:當ACTION_DOWN事件在某一個View或者ViewGroup的dispatchTouchEvent()方法中被消費掉的情況下,對應(yīng)的ACTION_UP事件也會在此被消費掉技竟,終止傳遞冰肴。

  • 繪制成圖:


    這里寫圖片描述

3. )ViewGroup2的onInterceptTouchEvent()和onTouchEvent() 都 return true的情況:**

  • 也就是讓ViewGroup2攔截掉事件,并且由它自己來消費事件榔组。


    這里寫圖片描述
  • 打log:


    這里寫圖片描述
  • 規(guī)律:可以看到熙尉,當ACTION_DOWN事件在某一個View或者ViewGroup的onTouchEvent()方法中被消費掉的情況下,對應(yīng)的ACTION_UP事件也會在此被消費掉搓扯,終止傳遞检痰。

    但是值得注意的是,這種情況下锨推,ACTION_UP事件是不會再經(jīng)過攔截器onInterceptTouchEvent()方法了的铅歼。

  • 繪圖如下:


    這里寫圖片描述
  • 4.) ViewGroup2的onTouchEvent() return true的情況:**

  • 就是讓VIewGroup2的onTouchEvent()方法在接收到View的onTouchEvent()方法傳遞過來的ACTION_DOWN事件時將其消費掉』豢桑看這種情況下谭贪,ACTION_UP事件是怎么傳遞的。

  • 打Log:


    這里寫圖片描述
  • 規(guī)律:可以從Log看出來锦担,當ACTION_DOWN事件被某控件的onToucEvent()方法消費掉,則其對應(yīng)的ACTION_UP事件只傳遞到該控件慨削。也就是不會傳遞到比此控件更深層的控件中去洞渔。

  • 繪制圖:


    這里寫圖片描述

總結(jié)歸納

  • ACTION_MOVE事件與ACTION_UP事件遵循類似的規(guī)律,上面只以ACTION_UP為例子分析探究缚态。

  • ACTION_MOVE事件與ACTION_UP事件的傳遞分發(fā)與其對應(yīng)之前的ACTION_DOWN事件有緊密聯(lián)系磁椒。

  • 具體的,當ACTION_DOWN事件在dispatchTouchEvent()方法中被消費玫芦,則對應(yīng)的ACTION_MOVE事件與ACTION_UP事件也會從上而下傳遞到該控件的該方法處被消費掉浆熔。

  • 當ACTION_DOWN事件在onTouchEvent()方法中被消費,則對應(yīng)的ACTION_MOVE事件與ACTION_UP事件只傳遞到該控件處的onTouchEvent()方法中然后被消費而終止傳遞桥帆。不會經(jīng)歷該控件之下的控件的傳遞過程医增。

  • 當所有方法都默認return super,則ACTION_MOVE事件與ACTION_UP事件會在Activity的onTouchEvent()中被消費掉。

注:【轉(zhuǎn)載請注明老虫,問題可提問叶骨,喜歡可打賞,博客持續(xù)更新祈匙,歡迎關(guān)注

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忽刽,一起剝皮案震驚了整個濱河市天揖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跪帝,老刑警劉巖今膊,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伞剑,居然都是意外死亡斑唬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門纸泄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赖钞,“玉大人,你說我怎么就攤上這事聘裁⊙┯” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵衡便,是天一觀的道長献起。 經(jīng)常有香客問我,道長镣陕,這世上最難降的妖魔是什么谴餐? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮呆抑,結(jié)果婚禮上岂嗓,老公的妹妹穿的比我還像新娘。我一直安慰自己鹊碍,他們只是感情好厌殉,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侈咕,像睡著了一般公罕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耀销,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天楼眷,我揣著相機與錄音,去河邊找鬼熊尉。 笑死罐柳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的狰住。 我是一名探鬼主播硝清,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼转晰!你這毒婦竟也來了芦拿?” 一聲冷哼從身側(cè)響起士飒,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔗崎,沒想到半個月后酵幕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡缓苛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年芳撒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未桥。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡笔刹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冬耿,到底是詐尸還是另有隱情舌菜,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布亦镶,位于F島的核電站日月,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缤骨。R本人自食惡果不足惜爱咬,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绊起。 院中可真熱鬧精拟,春花似錦、人聲如沸虱歪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽实蔽。三九已至,卻和暖如春谨读,著一層夾襖步出監(jiān)牢的瞬間局装,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工劳殖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铐尚,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓哆姻,卻偏偏與公主長得像宣增,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矛缨,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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