天天看點

Android 觸摸事件傳遞機制

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

1)public boolean dispatchTouchEvent(MotionEvent ev)  這個方法用來分發TouchEvent

2)public boolean onInterceptTouchEvent(MotionEvent ev) 這個方法用來攔截TouchEvent

3)public boolean onTouchEvent(MotionEvent ev) 這個方法用來處理TouchEvent

Android 觸摸事件傳遞機制

當 TouchEvent發生時,首先Activity将TouchEvent傳遞給最頂層的View,

1,View首先檢查dispatchTouchEvent這個函數的傳回結果:

    (1)如果傳回true ,則交給這個view的onTouchEvent處理。

    (2)如果傳回false ,則交給這個 view 的 interceptTouchEvent 方法來決定是否要攔截這個事件。

2,然後如果輪到 onInterceptTouchEvent執行的話:

    (1)如果傳回 true ,也就是攔截掉了,則交給這個view的onTouchEvent處理。

    (2)如果傳回 false ,那麼就傳遞給子 view ,由子 view 的 dispatchTouchEvent 再來開始這個事件的分發。

3,如果事件傳遞到某一層的子view 的 onTouchEvent 上了:

    (1)如果傳回 false ,那麼這個事件會從這個 view 往上傳遞,而且都是 onTouchEvent 來接收。而如果傳遞到最上面的 onTouchEvent 也傳回 false 的話,這個事件就會“消失“。

    (2)如果傳回true,那麼這個事件就會止于該view。