Могу ли я предотвратить срабатывание onFling () и onDown ()? - PullRequest
0 голосов
/ 09 мая 2019

Я обнаружил жесты onDown () и onFling () для двух разных целей, обе работают.

В onDown () должен воспроизводиться звук, в то время как во время onFling () обнаруживается пролистывание и выполняется действие, связанное со пролистыванием - во время жеста onFling () звук не воспроизводится.

Проблема в том, что звук onDown () запускается, когда я выполняю движение смахиванием или когда срабатывает onFling ().

Мой текущий жест onDown () выглядит следующим образом:

@Override
public boolean onDown(MotionEvent e) {

    playSound();

    return true;
}

Мой onFling () выглядит так:

@Override
public boolean onFling(MotionEvent downEvent, MotionEvent moveEvent, float velocityX, float velocityY) {
    boolean result = false;

    float diffY = moveEvent.getY() - downEvent.getY();
    float diffX = moveEvent.getX() - downEvent.getX();

    // which was greater? movement across Y or X
    if( Math.abs(diffX) > Math.abs(diffY) ) {

        // right or left swipe
        if( Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {

            doSomethingCool();

            result = true;

        }
    } else {
        // up or down swipe
        if( Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {

            doSomethingCool();

            result = true;
        }
    }

    return result;
}

Я проверил класс GestureDetector, чтобы увидеть, может ли onDown () иметь несколько параметров, таких как onDown(MotionEvent downEvent, MotionEvent moveEvent), но это невозможно.

Я пытался использовать константы MotionEvent (как ACTION_DOWN, так и ACTION_MOVE) в onDown (), чтобы исключить перевороты / сбрасывания в качестве возможной опции:

@Override
public boolean onDown(MotionEvent e) {

    if(e.getAction() == e.ACTION_DOWN) {
        playSound();
        return true;
    }

    return false;
}

Однако это не сработало. Это то, что просто неизбежно?

Я понимаю, что для выполнения "бросающего" движения вы должны сначала опустить палец ... но я надеюсь, что есть способ дважды проверить, что пользовательский палец опущен, а НЕ фактически находится в движении (смахивание /flinging).

Заранее спасибо!

...