代码之家  ›  专栏  ›  技术社区  ›  LoneWolfPR

安卓:手势检测器不会捕捉手势

  •  2
  • LoneWolfPR  · 技术社区  · 14 年前

    我的程序中必须有手势检测器。一个很好用,另一个不行。据我所知,它们都是以同样的方式实现的。

    下面是实现不起作用的代码:

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

    然后我有了这个块,它定义了借口检测器

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

    不管出于什么原因,它根本就没有记录到这一点。不管动画是否发生,程序都应该打印出我试图跟踪的日志.d(“motionevent”,“onfling”),但它没有。我只知道它注册了某种类型的触摸事件,因为它跟踪了“excuse-gesture-return”,“false”,从我展示的第一个街区。你有没有想过为什么不登记这场闹剧?

    2 回复  |  直到 12 年前
        1
  •  4
  •   LoneWolfPR    14 年前

        2
  •  1
  •   Konrad Viltersten    12 年前

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

    this excellent site