簡單來說,不想研究這個,坑死了。
-
onInterceptTouchEvent 是從父級向子級傳遞。
onTouchEvent 是從子級向父級傳遞。
- 它們兩個互相不影響,onInterceptTouchEvent 先觸發,onTouchEvent 後觸發。
-
onInterceptTouchEvent 是ViewGroup的事件。
onTouchEvent 是View 的事件,如果一個View 不能再包含子View ,則它沒有 onInterceptTouchEvent 事件。
- 事件觸發順序為 MotionEvent.ACTION_DOWN –> MotionEvent.ACTION_POINTER_DOWN –> MotionEvent.ACTION_MOVE –> MotionEvent.ACTION_POINTER_UP –> MotionEvent.ACTION_UP
- 其中 ACTION_POINTER_* 事件隻有在多點觸控時觸發。
- 事件觸發後在任何一種事件中傳回true,在其後觸發的所有事件都将不再繼續傳遞。
- 在這兩個事件中,return true 表示不再傳遞,return false 表示繼續傳遞。
- 這兩個事件的預設傳回值都是false。
-
View 有 void android.view.View.setOnTouchListener(OnTouchListener l) 方法。
但是ViewGroup 沒有 set… 方法,是以需要繼承然後覆寫。
- 使用 setOnTouchListener 方法後,再調用 super.onTouchEvent(event); 必然傳回true。即設定了 setOnTouchListener 後,會由此類處理觸控事件。