Android事件分發

2021-07-24 17:24:50 字數 1084 閱讀 1495

當使用者觸控螢幕時,系統會對觸控事件做出相應的相應,這個事件會產生乙個motionevent,系統根據一定的規則將其傳遞給view進行處理,這個過程就是事件分發機制了。

事件的傳遞分為兩個階段,即捕獲階段和冒泡階段。捕獲階段:事件最先由最外層的view接收,然後依次向內層傳遞,直到傳遞到最小的view,捕獲階段完成;冒泡階段:也就是捕獲階段的逆過程,先由最小的view開始向外冒泡,直到將事件傳遞到最外層view。

在捕獲和冒泡的過程中,可以控制事件是否被攔截,是否繼續分發,還是做出響應後消費掉,這裡是通過三個方法來控制事件的傳遞和消費機制的,系統又根據方法的返回值來進行相應的控制:

事件分發方法:publicbooleandispatchtouchevent(motioneventev)

當系統監聽到事件時,首先由activity捕獲到,如果該方法中返回true,表示事件將不進行分發了,並且事件自身被消費掉了,此時事件分發過程結束;如果該方法返回為false,表示事件還是不會向下分發,而是由上層的ontouchevent方法進行消費;如果該方法返回為 super.dispatchtouchevent(ev),事件將分發給本層的事件攔截onintercepttouchevent 方法進行處理。

事件攔截方法:publicbooleanonintercepttouchevent(motioneventev)

如果該方法返回 true,表示將事件進行攔截,並將攔截到的事件交由本層控制項的ontouchevent進行處理;如果該方法返回是false或super.onintercepttouchevent(ev),則表示不對事件進行攔截,並將事件分發到子view,由子view的dispatchtouchevent進行處理。

事件響應方法:public booleanontouchevent(motioneventev)

如果該方法返回true,表示ontouchevent處理完事件後消費了此次事件,此時事件終結,將不會進行後續的冒泡;如果ontouchevent返回false或super.ontouchevent(ev),事件在ontouchevent中處理後繼續向上層view冒泡,且由上層view的ontouchevent進行處理。

文章選自華清遠見嵌入式培訓

>>>更多優秀技術博文每日更新

Android 事件分發

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

Android事件分發

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

Android 事件分發

案例說明 linearlayout 下面有3個recyclerview 當手指在螢幕的中間上半屏滑動的時候,3個recyclerview會一起滑動 當手指在螢幕的下半屏滑動的餓時候,各自區域的recyclerview單獨滑動 先看下 效果圖 需要重寫linearlayout public class...