2012-08-01 68 views
1

我有一个RelativeLayout我将TouchListener放入使用GestureDetector。我已经完成并可以检测到双击,但是我怎样才能在视图中添加滑动事件呢?在doubleTap和Swipe之间切换

private void myTapEvent(){ 
     RlContent.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }); 

     gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onDoubleTap(MotionEvent e) { 
       count++; 
       doTaskHere(); 
       return true; 
      } 
      @Override 
      public boolean onDown(MotionEvent e) { 
       return true; 
      } 
     }); 
    } 

实现刷卡事件发生后,我怎么能 之间进行切换。)只允许窃听和禁用刷卡 和 湾)禁止敲击并只允许刷卡

回答

2

在您的GestureDetector监听器中,添加onFling方法。此外,要在它们之间切换,您需要班级中有一个可以切换的boolean变量。

private boolean mAllowSwipe = true; // True = swipe, no double-tap; false = double-tap, no swipe 

// ... 

private void switchGestureMode() { 
    if (mAllowSwipe) 
     mAllowSwipe = false; 
    else 
     mAllowSwipe = true; 
} 

// ... 

private void myTapEvent(){ 
    // ... 

    gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onDoubleTap(MotionEvent e) { 
      if (mAllowSwipe) { 
       return false; 
      } 
      count++; 
      doTaskHere(); 
      return true; 
     } 
     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      if (!mAllowSwipe) { 
       return false; 
      } 
      // Your logic here 
     } 
    }); 
} 

// ... 

有使用一扔herehere刷卡的一些例子,这里面的,如果你冲刷谷歌一点很多人。

+0

谢谢。没有想过使用布尔值来启用和禁用eventlisteners的想法。我正在考虑去除视图事件。这一个为我做了。 – 2012-08-01 06:58:53

2

为了检测滑动(它们被称为FLING EVENTS),您将必须实现android.view.GestureDetector.OnGestureListener接口。这个接口提供的方法之一是onFling。这将检测到滑动(你将不得不找到你需要的滑动事件的确切实现)。

关于切换和轻扫之间的切换,你打算使用某种按钮点击事件来做到这一点?让我修改你的代码,假设你正在使用两个按钮(忽略语法错误)。即使在不使用两个按钮的情况下,您仍然可以在下面的任意位置修改两个布尔值,无论您想禁用攻丝和滑动(滑动和攻丝都不会开始工作,直到单击其中一个按钮)

boolean makeSwipe = false; 
boolean makeTap =false; 

//onCreate method{ 
makeTapButton.setOnClickListener(new android.view.OnClickListener{ 

@Override 
public onClick(View arg0){ 
makeSwipe = false; 
makeTap = true; 
} 
}); 

makeSwipeButton.setOnClickListener(new android.view.OnClickListener{ 

@Override 
public onClick(View arg0){ 
makeSwipe = true; 
makeTap = false; 
} 
}); 

private void myTapEvent(){ 
    RlContent.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }); 

    gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onDoubleTap(MotionEvent e) { 

      if(makeTap) 
      { 
      count++; 
      doTaskHere(); 
      return true; 
      } 

      return false; 
     } 
     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 
    }); 
} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
      if(makeSwipe) 
      { 
      // Do some stuff 
      return true; 
      } 
    return false; 
}