Android 事件分發

2021-07-24 18:52:13 字數 2095 閱讀 9322

案例說明:

linearlayout 下面有3個recyclerview

當手指在螢幕的中間上半屏滑動的時候,3個recyclerview會一起滑動

當手指在螢幕的下半屏滑動的餓時候,各自區域的recyclerview單獨滑動

先看下 效果圖:

需要重寫linearlayout:

public

class

mylinearlayout

extends

linearlayout

@override

public

boolean

dispatchtouchevent(motionevent ev)

@override

public

boolean

onintercepttouchevent(motionevent ev)

@override

public

boolean

ontouchevent(motionevent event) else

if(event.getx()<2*width)

return

true;

}else

}else }}

分發的原理是從上到下,響應的順序是從下向上的,也就是說,當我們手指滑動螢幕的時候,linearlayout 會比他根節點下的recyclerview先獲得到這個事件,so,我們需要在父類控制項(linearlayout)中去攔截這個事件,然後在ontouchevent方法中去決定讓哪個控制項去消費這個事件
如果對事件分發原理還不是很了解的,這裡推薦一篇部落格跟你,說的很詳細事件分發原理詳解

注意事項:

事件分發有3個重要的方法,分別是 dispatchtouchevent()、 onintercepttouchevent()、ontouchevent(motionevent event)

只有有子類的控制項的viewgroup才去重寫onintercepttouchevent(),這裡的linearlayout就可以重寫,一旦重寫onintercepttouchevent(),將返回值設定為true,那麼接下來就會執行ontouchevent().

在ontouchevent() 方法中 就可以根據手指的在螢幕的位置,來將事件分發給哪乙個子view,具體寫法參考上面的ontouchevent(),需要注意的是,dispatchtouchevent()一般是直接拿來使用的,而不去重寫。比如說,想將事件分發給第乙個子view,就可以這麼寫this.getchildat(0).dispatchtouchevent(event);

之後在布局xml中引用就可以了:

<?xml version="1.0" encoding="utf-8"?>

""xmlns:tools=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

tools:context=".mainactivity">

"@+id/rl"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1">

"@+id/rl2"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1">

"@+id/rl3"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1">

如果還不是很了解,請參考dem

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...