事件分發主要過程

2021-07-30 08:01:07 字數 1070 閱讀 8016

touch事件分發中只有兩個主角:viewgroup和view。viewgroup包含onintercepttouchevent、dispatchtouchevent、ontouchevent三個相關事件。view包含dispatchtouchevent、ontouchevent兩個相關事件。其中viewgroup又繼承於view。

viewgroup和view組成了乙個樹狀結構,根節點為activity內部包含的乙個viwgroup。

觸控事件由action_down、action_move、aciton_up組成,其中一次完整的觸控事件中,down和up都只有乙個,move有若干個,可以為0個。

當acitivty接收到touch事件時,將遍歷子view進行down事件的分發。viewgroup的遍歷可以看成是遞迴的。分發的目的是為了找到真正要處理本次完整觸控事件的view,這個view會在ontouchuevent結果返回true。

當某個子view返回true時,會中止down事件的分發,同時在viewgroup中記錄該子view。接下去的move和up事件將由該子view直接進行處理。由於子view是儲存在viewgroup中的,多層viewgroup的節點結構時,上級viewgroup儲存的會是真實處理事件的view所在的viewgroup物件:如viewgroup0-viewgroup1-textview的結構中,textview返回了true,它將被儲存在viewgroup1中,而viewgroup1也會返回true,被儲存在viewgroup0中。當move和up事件來時,會先從viewgroup0傳遞至viewgroup1,再由viewgroup1傳遞至textview。

當viewgroup中所有子view都不捕獲down事件時,將觸發viewgroup自身的ontouch事件。觸發的方式是呼叫super.dispatchtouchevent函式,即父類view的dispatchtouchevent方法。在所有子view都不處理的情況下,觸發acitivity的ontouchevent方法。

onintercepttouchevent有兩個作用:1.攔截down事件的分發。2.中止up和move事件向目標view傳遞,使得目標view所在的viewgroup捕獲up和move事件。

事件分發機制

android中的事件型別分為按鍵事件和螢幕觸控事件,touch事件是螢幕觸控事件的基礎事件,有必要對它進行深入的了解。乙個最簡單的螢幕觸控動作觸發了一系列touch事件 action down action move action move action move.action move acti...

Android Touch事件分發

事件 viewgroup view有子元素 view無子元素 activity 方法功能 public boolean dispatchtouchevent motionevent ev yy ny分發 public boolean onintercepttouchevent motionevent...

ViewGroup事件分發

cancelandcleartouchtarget mfirsttouchtarget null 當事件為action down且 mfirsttouchtarget null 找到可以接收touch事件的view 判斷disallowintercept 標誌,如果為false,那就執行oninte...