【Android】GestureDetector 類的手勢操作方法含義
轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80489115
【前言】
GestureDetector 類含有三個介面:OnGestureListener、OnDoubleTapListener、OnContextClickListener。
GestureDetector 類含有兩個內部類:SimpleOnGestureListener、GestureHandler。
【正文】
直接通過呼叫介面重寫手勢操作方法:
介面OnGestureListener:
boolean onDown(MotionEvent e);
按下:手指接觸到觸控式螢幕的那一剎那觸發。(任何單擊手勢動作都會先執行一次 onDown 動作。)
void onShowPress(MotionEvent e);
按住:手指按在觸控式螢幕上觸發,它的時間範圍在按下起效,在長按(onLongPress)和滾動(onScroll)之前。
void onLongPress(MotionEvent e);
長按:手指按在觸控式螢幕上,不鬆開,且手指不移動持續一段時間觸發。(該方法執行前一定會執行一次 onShowPress 動作。如果執行該方法,則不會執行擡起 onSingleTapUp 動作。)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
滾動:手指在觸控式螢幕上滑動時觸發。(如果執行該方法,則不會執行 onSingleTapUp 動作。)
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
拋擲:手指在觸控式螢幕上迅速移動,並鬆開的動作,離開觸控式螢幕時觸發。(如果執行該方法,則不會執行 onSingleTapUp 動作。)
boolean onSingleTapUp(MotionEvent e);
擡起:手指快速單擊螢幕,離開觸控式螢幕時觸發。
介面OnDoubleTapListener:
boolean onSingleTapConfirmed(MotionEvent e);
擡起:與 onSingleTapUp 相同,但有附加條件,確保單擊之後短時間內沒有再次單擊,才會觸發。
boolean onDoubleTap(MotionEvent e);
雙擊:雙擊的第二下Touch down時觸發。
boolean onDoubleTapEvent(MotionEvent e);
雙擊:雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分。
介面OnContextClickListener:
boolean onContextClick(MotionEvent e);
Android6.0(API 23)及以上使用,用於檢測外部裝置上的按鈕是否按下的,例如藍芽觸控筆上的按鈕。(如果偵聽 onContextClick(MotionEvent),則必須在 View 的 onGenericMotionEvent(MotionEvent)中呼叫 GestureDetector 的 OnGenericMotionEvent(MotionEvent)。)
繼承 GestureDetector.SimpleOnGestureListener 類,重寫手勢操作方法:
GestureDetector mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return true;
}
});
不必將每一個方法都重寫,想實現哪個方法,就重寫哪個。
【注意事項】
1、如果監聽雙擊事件:onSingleTapUp()會被觸發兩次,但是onSingleTapConfirmed()一次都不會被觸發。所以,如果你既想監聽單擊事件,又想監聽雙擊時間,那麼請使用onSingleTapConfirmed()函式。
2、點選一下,非常快地(不滑動)Touch up:onDown → onSingleTapUp → onSingleTapConfirmed
3、點選一下,稍微慢點地(不滑動)Touch up:onDown → onShowPress → onSingleTapUp → onSingleTapConfirmed