Android: GestureDetector не будет ловить жесты - PullRequest
2 голосов
/ 27 октября 2010

У меня есть 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» из первого блока, который я показал.Любые мысли о том, почему он не зарегистрирует бросок?

Ответы [ 2 ]

4 голосов
/ 27 октября 2010

Я не совсем уверен, почему, но как только я поместил Overrides для ВСЕХ возможных жестов в SimpleOnGestureListener, он начал работать. Очевидно, им нужны были все, а не только Флинг.

1 голос
/ 01 декабря 2010

Это не нужно, что вы, вероятно, также сделали, и что заставляет вас работать так, что ваша активность переопределяет что-то вроде onTouchEvent так:

@Override
public boolean onTouchEvent(MotionEvent event) {
  if (myGestureDetector.onTouchEvent(event)) {
    return true;
  } else {
    return false;
  }
}

Я нашел ответ на этом отличном сайте.

...