日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android如何使用GestureDetector進行手勢檢測詳解_Android

作者:QiShare ? 更新時間: 2022-04-08 編程語言

1.引言

在操作應用的時候,會有很多不同的手勢操作,如按下、單擊、雙擊、長按等手勢,我們可以在這些手勢事件中添加相應的業務邏輯,那么如何檢測不同的手勢操作就比較重要了,本文將帶大家了解如何使用GestureDetector進行手勢檢測。

2.進行手勢檢測

2.1 創建GestureDetector

進行手勢檢測之前,需要先新建GestureDetector對象,示例如下:

gestureDetector = new GestureDetector(context, new GestureDetector.OnGestureListener() {
    @Override
    public boolean onDown(MotionEvent e) {
        log("onDown");
        return true;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        log("onShowPress");
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        log("onSingleTapUp");
        return true;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        log("onScroll");
        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        log("onLongPress");
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        log("onFling");
        return true;
    }
});

2.2 與onTouchEvent結合使用

示例中重寫了Activity的onTouchEvent(MotionEvent event)方法,并在其內部使用GestureDetector處理觸摸事件,示例如下:

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean b = gestureDetector.onTouchEvent(event);
    if (b) {
        return true;
    }
    return super.onTouchEvent(event);
}

2.3 GestureDetector.OnGestureListener

實現GestureDetector.OnGestureListener內的方法,在其中可以檢測到多種手勢,如onDown(MotionEvent e)按下、onShowPress(MotionEvent e)已經執行按下,還沒有移動或抬起、onSingleTapUp(MotionEvent e)單擊、onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)滾動、onLongPress(MotionEvent e)長按、onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)。

2.4 檢測雙擊手勢

雙擊手勢也是一種常見的手勢事件,使用GestureDetector檢測雙擊手勢需要調用setOnDoubleTapListener()方法設置GestureDetector.OnDoubleTapListener(),并實現其中的方法,其中的onDoubleTap(MotionEvent e)表示雙擊事件,示例如下:

gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        log("onSingleTapConfirmed");
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        log("onDoubleTap");
        return true;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        log("onDoubleTapEvent");
        return true;
    }
});
}

2.5 GestureDetector.SimpleOnGestureListener

如果不想實現GestureDetector.OnGestureListener 內的多個方法,那么可以創建類并繼承GestureDetector.SimpleOnGestureListener,示例如下:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener{
    @Override
    public boolean onDown(MotionEvent e) {

        return true;
    }
}

在創建GestureDetector對象的時候,傳入擴展后的類對象即可,示例如下:

gestureDetector = new GestureDetector(context, new SimpleGestureListener());

3.總結

使用GestureDetector能方便地進行手勢檢測,靈活合理地使用手勢檢測,在其中處理應用的業務邏輯,能讓體驗更加的友好。

原文鏈接:https://juejin.cn/post/7057027268144529415

欄目分類
最近更新