2016-04-28 4 views
0

私は次のコードで、活動の右または左のジェスチャーにスワイプして活動を開始しようとしているとの情事のスワイプジェスチャーダウン:無効にアップしてGestureDetectorCompat

gestureDetector = new GestureDetectorCompat(this, new GestureDetector.SimpleOnGestureListener(){ 
    private static final int SWIPE_THRESHOLD = 50; 
    private static final int SWIPE_VELOCITY_THRESHOLD = 0; 

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

    @Override 
    public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { 
     //user will move forward through messages on fling up or left 
     boolean forward = false; 
     //user will move backward through messages on fling down or right 
     boolean backward = false; 

     //calculate the change in X position within the fling gesture 
     float horizontalDiff = event2.getX() - event1.getX(); 
     //calculate the change in Y position within the fling gesture 
     float verticalDiff = event2.getY() - event1.getY(); 

     float absHDiff = Math.abs(horizontalDiff); 
     float absVDiff = Math.abs(verticalDiff); 
     float absVelocityX = Math.abs(velocityX); 
     float absVelocityY = Math.abs(velocityY); 

     if(absHDiff > absVDiff && absHDiff > SWIPE_THRESHOLD && absVelocityX > SWIPE_VELOCITY_THRESHOLD){ 
      //move forward or backward 
      if(horizontalDiff>0) backward=true; 
      else forward=true; 
     } 
     else if(absVDiff > SWIPE_THRESHOLD && absVelocityY > SWIPE_VELOCITY_THRESHOLD){ 
      if(verticalDiff>0) backward=true; 
      else forward=true; 
     } 

     //user is cycling forward through messages 
     if(forward){ 
      //check current message is not at end of array, increment or set back to start 
      swipeTo(SWIPE_LEFT); 
     } 
     //user is cycling backwards through messages 
     else if(backward){ 
      //check that current message is not at start of array, decrement or set to last message 
      swipeTo(SWIPE_RIGHT); 
     } 

     //return super.onFling(event1, event2, velocityX, velocityY); 
     return true; 
    } 

}); 

からアクションを無効にする方法スワイプが垂直(上から下、下から上)のときに撮影されますか?

SWIPE_LEFTおよびSWIPE_RIGHTは、それぞれ値1および2のクラスメンバ定数です。

ありがとうございます。

答えて

0

absVelocityYの高い値を検出する必要があります。値が高すぎる場合は、垂直方向の飛行を表します。そのような場合は、新しいActivityを開始しないでください。

+0

ありがとう@jaibatrik、しかし「どれほど高すぎますか」 – Shareb

+0

'android.util.Log'を使用して、垂直絶対速度の値を出力します。試して、あなたに合った価値を確定してください。 – jaibatrik

関連する問題