Skip to main content

Easy swipe gesture handling on android

Recently I wanted to implement swipe functionality for activity in my android app but couldn't find a nice and simple example that would explain what do you really need to do. There are multiple sites that are bloated with code, but somehow I couldn't believe that to implement such a simple (and kinda basic if you think about it) functionality you need to write tens of lines of code.

So if you're like me, looking for a simple and elegant solution for swipe gesture handling, here it is...

First some theory - to implement swipe you will need to:
1. Create a GestureDetector
2. Create an OnGestureListener by extending GestureDetector.SimpleOnGestureListener
3. Implement onFling method in listener created in step 2
4. Handle the onTouchEvent in your activity

Now let's jump to the code:
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;

public class MySwipeSupportedActivity extends Activity {
 // swipe gesture constants
 private static final int SWIPE_MIN_DISTANCE = 120;
 private static final int SWIPE_THRESHOLD_VELOCITY = 200;

 private GestureDetector gestureDetector;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  gestureDetector = new GestureDetector(this, new OnSwipeGestureListener());
  // TODO: any other logic you require in the onCreate
 }

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

 /**
  * Class handling swipe gesture
  */
 private class OnSwipeGestureListener extends 
GestureDetector.SimpleOnGestureListener {
  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, 
float velocityX, float velocityY) {
   float deltaX = e2.getX() - e1.getX();
   if ((Math.abs(deltaX) < SWIPE_MIN_DISTANCE) 
|| (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY)) {
    return false; // insignificant swipe
   } else {
    if (deltaX < 0) { // left to right
     handleSwipeLeftToRight();
    } else { // right to left
     handleSwipeRightToLeft();
    }
   }
   return true;
  }
 }

 private void handleSwipeLeftToRight() {
  // TODO: implement the business logic here
 }

 private void handleSwipeRightToLeft() {
  // TODO: implement the business logic here
 }
}

That's it. Enjoy your swipe-enabled activity :)

Comments

  1. Nice post...very helpful !!!!

    ReplyDelete
  2. Great!
    This is the most simple way of doing this that I have seen...

    ReplyDelete

Post a Comment