天天看點

android 觸摸事件傳遞機制事件傳遞的三個階段

一次完整的事件傳遞主要包括三個階段,分别是事件的分發、攔截、和消費。

事件傳遞的三個階段

  • 分發(dispatch)

    事件分發對應dispatchTouchEvent方法,在安卓系統中,所有的觸摸事件都是通過這個方法來分發的

public boolean dispatchTouchEvent(MotionEvent ev)

方法傳回true代表事件被目前視圖消費掉,不再繼續分發事件。方法傳回值為super.dispatchTouchEvent表示繼續分發該事件,如果目前視圖是ViewGroup及其子類,則會調用onInterceptTouchEvent方法判定是否攔截該事件.

  • 攔截

    事件攔截對應着onInterceptTouchEvent方法,這個方法隻在viewgroup及其子類中存在,在view和activity中是不存在的.

public boolean inIntercepterTouchEvent(MotionEvent ev)

true表示攔截這個時間,不繼續分發給子視圖,同時交由自身的onTouchEvent方法進行消費,傳回false或者super.onInterceptTouchEvent 表示不對事件攔截,需要繼續傳遞給子視圖

android 觸摸事件傳遞機制事件傳遞的三個階段
  • 消費

    時間的消費對應着onTouchEvent方法,方法原型如下:

public boolean onTouchEvent(MotionEvent event)

該方法傳回值為true表示目前視圖可以 處理對應的時間,事件将不會向上傳遞給父視圖,傳回值為false表示目前視圖不處理這個事件,時間會被傳遞給俯視圖的onTouchEvent 方法進行處理

android 觸摸事件傳遞機制事件傳遞的三個階段