Android事件分發機制簡單理解

2021-07-24 08:05:11 字數 884 閱讀 5518

鑑 於之前專案出現過事件衝突的情況,主要是頭部橫向的banner和縱向的滾動的內容區域滑動時候衝突。頁面的三大主要控制項就最外部的scrollview,內容區域的listview,以及橫向滾動的viewpager,這三個控制項都是自定義重寫實現的,每個控制項裡面也實現了很多的邏輯。剛開始看暈了。後來了解的整個事件的傳遞機制後,感覺還是不難的,記錄下。

首先事件都是從最頂端的頁面(通俗講就是activity)一級一級傳給自己的子view的。也就是從父控制項傳給子控制項的邏輯。父控制項就是容器控制項,非容器控制項就是子view,當然父控制項頁可以是子view。邏輯圖如下:

事件就是按這樣的順序來的。我們常涉及到主要方法主要有:

a.分發事件的dispatchtouchevent()

b.攔截事件onintercepttouchevent(),

c.處理觸控事件的ontouchevent(). 

首先viewgroup 呼叫自己dispatchtouchevent(),該方法返回boolean 型別,true 代表銷毀事件,false代表 不傳遞給子view,也不銷毀事件,交給父類ontouch處理。            super.dispatchtouchevent(ev)代表呼叫父控制項攔截方法onintercepttouchevent()處理,該方法也是返回boolean 型別。返回true代表攔截事件,父控制項ontouch方法將被呼叫。想要在具體的控制項ontouch 處理邏輯就可以這樣控制。返回false代表不攔截事件,傳到子view 的dispatchtouchevent()方法,重複這樣的動作。當然以上針對的是正常情況下viewgroup,view也是差不多,只是是非容器控制項,也就沒onintercepttouchevent()方法重寫直說。就這樣,根據自己的意向想要在**控制,就把邏輯寫在相應的位置,返回對應的值。就這樣,簡單記錄下,個人理解!!!

Android事件分發機制

public boolean dispatchtouchevent motionevent ev else return consume 上面的一段 將事件分發中三個主要方法的關係表現。一 touch 事件分析 事件分發 public boolean dispatchtouchevent motio...

Android事件分發機制

花了一下午的事件研究了一下android的事件分發機制,覺得有必要總結一下 順便分享出來,希望對大家有用 1 首先最重要的是需要了解viewgroup裡面重寫的三個方法 1 dispatchtouchevent 用於事件的分發 2 onintercepttouchevent用於事件的攔截 3 ont...

Android事件分發機制

一 三個重要的方法 dispatchtouchevent onintercepttouchevent activity和view無此方法 activity 作為事件的原始分發著會造成無響應 view最為事件的最末端要麼處理事件,要麼回傳事件 ontouchevent 二 事件分發流程 activit...