Skip to content Skip to sidebar Skip to footer

Swipe Gesture In All Direction(left,right, Up, Down )

I need to detect swipe direction in my code. I can detect the direction but it comes like if I swipe right top right or left-top like that coming. same for the left, my requirement

Solution 1:

You should calculate angle then decide with that. If the vector is bigger than your min distance value, then you can check for angle.

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

Solution 2:

Create a GestureDetectorCompat object

GestureDetectorCompat gestureDetectorCompat;

and override onTouchEvent in the activity

@OverridepublicbooleanonTouchEvent(MotionEvent event) {
            gestureDetectorCompat.onTouchEvent(event);
            returntrue;
        }

or if you want to detect on some view then you can Override onTouch

someView.setOnTouchListener(newView.OnTouchListener() {
            @OverridepublicbooleanonTouch(View view, MotionEvent motionEvent) {
                gestureDetectorCompat.onTouchEvent(motionEvent);
                returnfalse;
            }
        });

and initialize gestureDetectorCompat as follows somewhere preferably in onCreate() and you are done.

gestureDetectorCompat = newGestureDetectorCompat(this, newGestureDetector.SimpleOnGestureListener() {
        @OverridepublicbooleanonScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            floatangle= (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");
                returntrue;
            }

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

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

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

            returnfalse;
        }


    });

Post a Comment for "Swipe Gesture In All Direction(left,right, Up, Down )"