2016-11-29 8 views
0

enter code hereスワイプ方向を検出する必要があります。方向を検出することはできますが、そのように右上または左上をスワイプすると。左にも同じですが、私の必要条件は、左にスワイプすると指を持ち上げることなく、同様にすべての方向に左に来るだけです。誰も私を助けることができます。大変ありがとうございました!すべての方向(左、右、上、下)でスワイプジェスチャ

@Override 公共ブールonTouchEvent(MotionEventのタッチイベント){

switch (touchevent.getAction()) { 
     // when user first touches the screen we get x and y coordinateyo 
     case MotionEvent.ACTION_DOWN: { 
      x1 = touchevent.getX(); 
      y1 = touchevent.getY(); 
      break; 
     } 

     case MotionEvent.ACTION_MOVE: { 


      x2 = touchevent.getX(); 
      y2 = touchevent.getY(); 


      float deltaX = x2 - x1; 


      if (Math.abs(deltaX) > MIN_DISTANCE) { 
       // Left to Right swipe action 
       if (x2 > x1) {; 
        Log.e("RTL", "Right to Left Swap Performed"); 
       } 

       else { 
        Log.e("LTR", "Left to Right Swap Performed"); 
       } 

      } else { 

       if (y2 > y1) { 

        Log.e("UTD", "UP to Down Swap Performed"); 
       } 

       // Right to left swipe action 
       else { 
        Log.e("DTU", "Down to UP Swap Performed"); 
       } 
      } 
     } 
    } 
    return false; 
} 
+0

http://stackoverflow.com/questions/4139288/android-how-to-handle-right-to-left-swipe-gestures https://developer.android.com/training/ gestures/detector.html – cokceken

+0

@cokceken moveは動作していますが、正確な左、右、上、下を得ることはできません – user2806221

+0

方向を返す関数はないと思います。あなたは数学をするべきです。移動ベクトルを計算し、角度を計算します。あなたのベクトルがXより大きく、あなたの角度がZ-Yの間であれば、ユーザーはdirection1をスワイプします。 – cokceken

答えて

0

あなたはそれと決め、その後の角度を計算する必要があります。ベクトルがあなたの最小距離値より大きい場合は、角度を確認することができます。

float angle = (float) Math.toDegrees(Math.atan2(y2 - y1, x2 - x1)); 
if(angle > 45 && angle <= 135) return UP; 
else if(angle > 135 && angle <= 225) return LEFT; 
else if(angle > 225 && angle <= 315) return DOWN; 
else return RIGHT; 
0

GestureDetectorCompatオブジェクト

GestureDetectorCompat gestureDetectorCompat; 

を作成し、活動のonTouchEvent

@Override 
     public boolean onTouchEvent(MotionEvent event) { 
      gestureDetectorCompat.onTouchEvent(event); 
      return true; 
     } 

かあなたには、いくつかのビューに検出したいならば、あなたはonTouchをオーバーライドすることができますをオーバーライドします

someView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       gestureDetectorCompat.onTouchEvent(motionEvent); 
       return false; 
      } 
     }); 

のonCreate(で好ましくはどこかに次のようにgestureDetectorCompatを初期化)と設定が完了しています。

gestureDetectorCompat = new GestureDetectorCompat(this, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
      float angle = (float) Math.toDegrees(Math.atan2(e1.getY() - e2.getY(), e2.getX() - e1.getX())); 

      if (angle > -45 && angle <= 45) { 
       Log.d(DEBUG_TAG, "Right to Left swipe performed"); 
       return true; 
      } 

      if (angle >= 135 && angle < 180 || angle < -135 && angle > -180) { 
       Log.d(DEBUG_TAG, "Left to Right swipe performed"); 
       return true; 
      } 

      if (angle < -45 && angle >= -135) { 
       Log.d(DEBUG_TAG, "Up to Down swipe performed"); 
       return true; 
      } 

      if (angle > 45 && angle <= 135) { 
       Log.d(DEBUG_TAG, "Down to Up swipe performed"); 
       return true; 
      } 

      return false; 
     } 


    }); 
関連する問題