麻煩的手勢
Screen Touch Events
螢幕 Touch 事件順序:
- ACTION_DOWN
- ACTION_MOVE
- ACTION_MOVE
- …
- ACTION_MOVE
- ACTION_UP
View Touch Event Callback
View 的 Touch 事件相關方法:
- public boolean dispatchTouchEvent(MotionEvent ev) 用來分發 TouchEvent
- public boolean onInterceptTouchEvent(MotionEvent ev) 用來攔截 TouchEvent
- public boolean onTouchEvent(MotionEvent ev) 用來處理 TouchEvent
實際執行順序:
- TouchEvent 發生時,會先傳給最頂層的 View 裡的 dispatchTouchEvent()
- dispatchTouchEvent() 先進行分發,如果 return true 就交給這個 view 的 onTouchEvent() 處理
- 如果 return false,會交給 onInterceptTouchEvent() 決定是否攔截。
- 如果 return true 就交給它的 onTouchEvent()
- 如果 return false 才會傳給子 view然後再從子 view的dispatchTouchEvent() 繼續
- 如果子 view 的 onTouchEvent() 回傳了 false,那它就會再往上傳
- 如果傳到最上層還是 false 的話,這個事件就會消失
GestureDetector
簡單 GestureDetector.SimpleOnGestureListener 的例子:
public class MainActivity extends Activity { |
只要在 OnGestureListener 覆寫想要偵測的方法即可:
Method | Description |
---|---|
boolean onDoubleTap(MotionEvent e) | |
boolean onDoubleTapEvent(MotionEvent e) | |
boolean onDown(MotionEvent e) | |
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) | |
void onLongPress(MotionEvent e) | |
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) | |
void onShowPress(MotionEvent e) | |
boolean onSingleTapConfirmed(MotionEvent e) | |
boolean onSingleTapUp(MotionEvent e) |