У меня есть GestureDetectors в моей программе.Один работает прекрасно, другой нет.Насколько я могу судить, они оба реализованы одинаково.
Вот код для реализации того, который не работает:
myExcuseGestureDetector = new GestureDetector(new excuseGestureDetector());
excuseView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(myExcuseGestureDetector.onTouchEvent(event)){
Log.d("Excuse Gesture Return","true");
return true;
}
Log.d("Excuse Gesture Return","false");
return false;
}
});
Затем у меня есть этот блок позже, которыйопределяет excuseGestureDetector
private class excuseGestureDetector extends SimpleOnGestureListener{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d("MotionEvent","onFling");
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if(currExcuseNumber<currExcuseSet.size()){
currExcuseNumber++;
loadNextExcuse(currExcuseNumber,1);
excuseView.setInAnimation(slideLeftExcuseIn);
excuseView.setOutAnimation(slideLeftExcuseOut);
excuseView.showNext();
return true;
}
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if(currExcuseNumber > 1){
loadNextExcuse(currExcuseNumber,0);
excuseView.setInAnimation(slideRightExcuseIn);
excuseView.setOutAnimation(slideRightExcuseOut);
excuseView.showPrevious();
return true;
}
}
} catch (Exception e) {
// nothing
}
return false;
}
}
По какой-то причине он вообще не регистрирует сброс.Независимо от того, происходит анимация или нет, программа должна распечатать Log.d («MotionEvent», «onFling»), который я пытаюсь отследить, а это не так.Все, что я знаю, это то, что он регистрирует, что произошло какое-то касание, потому что он отслеживает «Excuse Gesture Return» «false» из первого блока, который я показал.Любые мысли о том, почему он не зарегистрирует бросок?