2016-11-29 2 views
0

enter code here müssen Swipe direction.In meinem Code kann ich die Richtung erkennen, aber es kommt wie, wenn ich rechts oben rechts oder links oben wie das Kommen wischen . gleich für die linke, meine anforderung ist ohne hebe finger, wenn ich nach links wische sollte es nur links kommen, ebenso alle richtung. Kann mir jemand helfen? Danke im voraus!Swipe Geste in alle Richtungen (links, rechts, oben, unten)

@Override public boolean onTouchEvent (Motiontouch) {

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/ Gesten/Detektor.html – cokceken

+0

@cokceken Bewegung funktioniert..aber ich kann nicht genau links, rechts, oben und unten – user2806221

+0

Ich glaube nicht, dass es eine Funktion gibt, die Richtung zurückgibt. Sie sollten die Mathematik machen. Berechnen Sie den Bewegungsvektor, berechnen Sie den Winkel. Wenn dein Vektor größer als X ist und dein Winkel zwischen Z-Y liegt, hat der Benutzer direction1 gewischt. – cokceken

Antwort

0

Sie Winkel berechnen sollte dann mit, dass sich entscheiden. Wenn der Vektor größer als der Wert für die Mindestentfernung ist, können Sie nach dem Winkel suchen.

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

erstellen GestureDetectorCompat Objekt

GestureDetectorCompat gestureDetectorCompat; 

und außer Kraft setzen onTouchEvent der Tätigkeit

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

oder wenn Sie auf einem gewissen Blick erkennen, dann können Sie OnTouch außer Kraft setzen

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

und gestureDetectorCompat initialisieren, wie irgendwo vorzugsweise folgt in onCreate() und Sie sind fertig.

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; 
     } 


    }); 
Verwandte Themen