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

는 슬쩍 이벤트를 구현 한 후, 어떻게 사이를 전환 할 수 있습니다.) 이 허용하는 경우에만 도청 및 B를 강타 해제.) 도청 해제 만 보내 주시면 가능.

답변

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

감사합니다. boolean을 사용하여 eventlisteners를 활성화 및 비활성화하려는 생각을하지 않았습니다. 나는 그 시야의 사건을 제거하는 것과 같은 것을 생각하고 있었다. 이것은 나를 위해 그것을했다. –

2

스 와이프를 감지하려면 (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; 
} 
관련 문제