android—事件分發—小結

一、基礎知識

(1) 全部 Touch 事件都被封裝成了 MotionEvent 對象,包括 Touch 的位置、時間、歷史記錄以及第幾個手指(多指觸摸)等。java

(2) 事件類型分爲 ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL,每一個事件都是以 ACTION_DOWN 開始 ACTION_UP 結束。函數

(3) 對事件的處理包括三類,分別爲傳遞——dispatchTouchEvent()函數、攔截——onInterceptTouchEvent()函數、消費——onTouchEvent()函數和 OnTouchListenerspa

二、傳遞流程

(1) 事件從 Activity.dispatchTouchEvent()開始傳遞,只要沒有被中止或攔截,從最上層的 View(ViewGroup)開始一直往下(子 View)傳遞。子 View 能夠經過 onTouchEvent()對事件進行處理。code

(2) 事件由父 View(ViewGroup)傳遞給子 View,ViewGroup 能夠經過 onInterceptTouchEvent()對事件作攔截,中止其往下傳遞。orm

(3) 若是事件從上往下傳遞過程當中一直沒有被中止,且最底層子 View 沒有消費事件,事件會反向往上傳遞,這時父 View(ViewGroup)能夠進行消費,若是仍是沒有被消費的話,最後會到 Activity 的 onTouchEvent()函數。對象

(4) 若是 View 沒有對 ACTION_DOWN 進行消費,以後的其餘事件不會傳遞過來。事件

(5) OnTouchListener 優先於 onTouchEvent()對事件進行消費。
上面的消費即表示相應函數返回值爲 true。ci

相關文章
相關標籤/搜索