Android:GestureDetector不会捕捉手势

时间:2010-10-26 20:08:00

标签: android gestures

我必须在我的程序中使用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”),而不是。我所知道的是它确实记录了某种形式的事件发生了,因为它确实从我展示的第一个块中找出了“借口手势返回”“假”。有关它为什么不注册投掷的任何想法?

2 个答案:

答案 0 :(得分:4)

我不确定为什么,但是当我在SimpleOnGestureListener中为所有可能的手势设置Overrides时,它就开始工作了。显然它需要它们全部在那里,而不仅仅是onFling。

答案 1 :(得分:1)

这不是必需的,你可能也做了什么以及它对你有用的是你的活动覆盖onTouchEvent somtehing如下:

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

我在this excellent site找到了答案。