Android 滑動衝突,事件分發機制的詳解

2021-07-11 19:41:34 字數 1428 閱讀 4848

android中事件分發機制 ,是在 dispatchtouchevent,onintercepttouchevent,ontouchevent這三個方法中做處理,上一層空間不做攔截處理,將事件分發給最底層的view處理。

android中的事件型別分為按鍵事件和螢幕觸控事件,touch事件是螢幕觸控事件的基礎事件,有必要對它進行深入的了解。 

乙個最簡單的螢幕觸控動作觸發了一系列touch事件:action_down->action_move->action_move->action_move...->action_move->action_up 

當螢幕中包含乙個viewgroup,而這個viewgroup又包含乙個子view,這個時候android系統如何處理touch事件呢?到底是viewgroup來處理touch事件,還是子view來處理touch事件呢?我只能很肯定的對你說不一定。呵呵,為什麼呢?看看下面我的調查結果你就明白了。 

android系統中的每個view的子類都具有下面三個和touchevent處理密切相關的方法: 

1)public boolean dispatchtouchevent(motionevent ev)  這個方法用來分發touchevent 

2)public boolean onintercepttouchevent(motionevent ev) 這個方法用來攔截touchevent 

3)public boolean ontouchevent(motionevent ev) 這個方法用來處理touchevent 

當touchevent發生時,首先activity將touchevent傳遞給最頂層的view, touchevent最先到達最頂層 view 的 dispatchtouchevent ,然後由  dispatchtouchevent 方法進行分發,如果dispatchtouchevent返回true ,則交給這個view的ontouchevent處理,如果dispatchtouchevent返回 false ,則交給這個 view 的 intercepttouchevent 方法來決定是否要攔截這個事件,如果 intercepttouchevent 返回 true ,也就是攔截掉了,則交給它的 ontouchevent 來處理,如果 intercepttouchevent 返回 false ,那麼就傳遞給子 view ,由子 view 的 dispatchtouchevent 再來開始這個事件的分發。如果事件傳遞到某一層的子 view 的 ontouchevent 上了,這個方法返回了 false ,那麼這個事件會從這個 view 往上傳遞,都是 ontouchevent 來接收。而如果傳遞到最上面的 ontouchevent 也返回 false 的話,這個事件就會「消失」,而且接收不到下一次事件。

讓子先處理的方法是 重寫父的onintercepttouchevent事件並返回false

public boolean onintercepttouchevent(motionevent ev) 

Android 事件分發

touch 事件的分發和消費機制dispatchtouchevent onintercepttouchevent 和ontouchevent dispatchtouchevent 事件分發 true 事件會分發給當前view 並由dispatchtouchevent 方法消費,同時停止向下傳 fal...

Android事件分發

android 中與 touch 事件相關的方法包括 dispatchtouchevent motionevent ev onintercepttouchevent motionevent ev ontouchevent motionevent ev 能夠響應這些方法的控制項包括 viewgroup...

Android事件分發

當使用者觸控螢幕時,系統會對觸控事件做出相應的相應,這個事件會產生乙個motionevent,系統根據一定的規則將其傳遞給view進行處理,這個過程就是事件分發機制了。事件的傳遞分為兩個階段,即捕獲階段和冒泡階段。捕獲階段 事件最先由最外層的view接收,然後依次向內層傳遞,直到傳遞到最小的view...