Android: GestureDetector не улавливает жесты

У меня есть 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;
    }
});

Затем у меня есть этот блок позже, который определяет извинитеGestureDetector

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"), который я пытаюсь отследить, а это не так. Все, что я знаю, это то, что он регистрирует, что произошло какое-то событие касания, потому что он действительно отслеживает «False Excuse Gesture Return» из первого блока, который я показал. Любые мысли о том, почему он не зарегистрирует интрижку?


person LoneWolfPR    schedule 26.10.2010    source источник


Ответы (2)


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

person LoneWolfPR    schedule 26.10.2010
comment
Здесь есть две вещи: ваш обработчик onTouch() в представлении, который должен вернуться, если он использовал событие касания. Однако GestureDetector может потребоваться несколько событий. Таким образом, вы не должны просто возвращать myExcuseGestureDetector.onTouchEvent(event), как вы делаете сейчас, но вы должны передавать каждое событие в GestureDetector и возвращать true, чтобы указать, что вы воспользовались прикосновением. Скорее всего, сейчас это работает, потому что GestureDetector всегда возвращает true. - person botteaap; 30.01.2011
comment
@LoneWolfPR я использую его вот так ...... но он не работает ... пожалуйста, посмотрите .... pastebin.com/n9JPGrCn - person Animesh Mangla; 31.12.2015
comment
На Dialog не работает. Вы тестировали на Dialog? - person zeeali; 06.03.2017

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

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

Я нашел ответ на этот отличный сайт< /а>.

person sax    schedule 01.12.2010
comment
или просто return myGestureDetector.onTouchEvent(event) - person Jason Hu; 10.11.2016