Android:GestureDetector 无法捕获手势

标签 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;
    }
});

然后我稍后会定义这个 block ,它定义了leaveGestureDetector

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;
     }
}

无论出于何种原因,它根本不记录该 throw 。无论动画是否发生,程序都应该打印出我试图跟踪的 Log.d("MotionEvent","onFling") 但它没有。我所知道的是,它确实注册了某种触摸事件的发生,因为它确实从我显示的第一个 block 中追踪出了“Excuse Gesture Return”“false”。关于为什么它不会注册 fling 的任何想法吗?

最佳答案

我不太确定为什么,但是一旦我将所有可能的手势的覆盖放在 SimpleOnGestureListener 中,它就开始工作。显然它需要所有这些,而不仅仅是 onFling。

关于Android:GestureDetector 无法捕获手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027553/

相关文章:

java - Android 手势、单笔划和多笔划产生不一致的结果

java - 如何在 Activity 类中启用 xml Button?

ios - 如何检测用户是否在iOS编程中没有捏合和缩放

ios - 为 UITableView 强制两指滚动,但禁用一指滚动

android - 在 Android 中动态添加一个 RelativeLayout 到一个 LinearLayout

ios - 检查特定的手势识别器

Android,在可点击的小部件上做手势

android - `adb shell input` 返回 `Killed` 响应,没有注册任何输入

android - 我的代码有什么问题?

android - 如何以编程方式打开和关闭键盘的预测文本选项