1. 程式人生 > >【Android】GestureDetector 類的手勢操作方法含義

【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


由於本人安卓知識及技術有限,本文如有錯誤或不足請評論指出,非常感謝!