2013-05-24 2 views
0

Я пытаюсь реализовать fling. Проблема в том, что я получаю ее только тогда, когда X находится на смещении 0 (что означает на краю экрана). Когда я пытаюсь сделать бросок в середине экрана, ничего не происходит. Это происходит только на X. Y ведет себя нормально. Вот код:Горизонтальная стрельба начинается только по смещению 0

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    try { 

     if ((e1.getY() < CARD_POSITION) && (e2.getY() < CARD_POSITION) 
       && (Math.abs(e1.getX() - e2.getX()) >SWIPE_MIN_DISTANCE) 
       ) { 
      Log.v("Fling:",Double.toString(e1.getX())); 
      return true; 
     } else { 


      return false; 
     } 
    } catch (Exception e) { 
     return false; 
    } 

} 

ответ

0

Я encoutered подобный вопрос в прошлом. Это оказалось ошибкой в ​​математике того, как я сравнивал х-направление с минимальным порогом расстояния, который я использовал. Основываясь на том, что вы описываете в сочетании с отправленным кодом, звучит так, как если бы направление x не работало, то разные, отличающиеся между x1 и x2, после применения абсолютного значения не выходят за то, что вы думаете.

С 0 смещения, прокручивая весь экран, вы можете зарегистрировать пальцы, потому что на таком большом расстоянии различаются два значения, чтобы вызвать порог. Но с середины экрана скажите где x1 = 400 и x2 = если зарегистрировано событие перемещения, вы не вызываете этот порог.

То, что сработало для меня удалял абсолютное значение

public boolean onFling(MovtionEvent e1, MotionEvent e2, float velocityX, float velocityY){ 

if(e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){ 
    Log.d("Swipe", "Left to right") 
    return true; 
} else if (e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){ 
    Log.d("Swipe", "Right to Left") 
    return true; 
} 

Мои рассуждения были основаны на GestureDetector документы, которые описывают то, что e1 и e2 представляют:

e1 Первый вниз событие движения, который начал прокрутки.
e2 движение события движения, вызвавшего ток onFling.

Ошибка оказалась предположение, в котором произошла й е1 intial ACTION_DOWN по отношению к ACTION_MOVE от е2