Я обнаружил жесты 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).
Заранее спасибо!