2012-08-01 69 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; 
}