Android tip #010 – Left and right swipe (gesture events)

Item Description
Platform Android
Language Java
Description Android has some tools to receive touch events, but with this code, we will received left and right swipes on the whole screen

Code

public class YourActivity extends Activity {
  private GestureDetector gestureDetector;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    // ...

    gestureDetector = new GestureDetector(
                      new SwipeGestureDetector());
  }

  /* ... */

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

  private void onLeftSwipe() {
    // Do something
  }

  private void onRightSwipe() {
    // Do something
  }

  // Private class for gestures
  private class SwipeGestureDetector 
          extends SimpleOnGestureListener {
    // Swipe properties, you can change it to make the swipe 
    // longer or shorter and speed
    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 200;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2,
                         float velocityX, float velocityY) {
      try {
        float diffAbs = Math.abs(e1.getY() - e2.getY());
        float diff = e1.getX() - e2.getX();

        if (diffAbs > SWIPE_MAX_OFF_PATH)
          return false;

        // Left swipe
        if (diff > SWIPE_MIN_DISTANCE
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
           YourActivity.this.onLeftSwipe();

        // Right swipe
        } else if (-diff > SWIPE_MIN_DISTANCE
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
          YourActivity.this.onRightSwipe();
        }
      } catch (Exception e) {
        Log.e("YourActivity", "Error on gestures");
      }
      return false;
    }
  }
}

You may also like...

5 Responses

  1. Lavi says:

    Left swipe and right swipe conditions are the same…

    The right swipe you could choose:
    ..} else if (-diff > SWIPE_MIN_DISTANCE && …

  2. ERiDeM says:

    Thanks for the tip ;-)
    I’ve fixed the code.

  3. hans says:

    Thank you for this example. however I had to seacrh quite a lot to get it run… This was due to the onTouchEvent method missing. After I have added the code below it worked smoothly

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

  4. Andy says:

    I am trying to use your example, but its not working. I am just testing to see if it listens to anything, but nothing happens when I try to swipe. Any ideas?

  5. Terence says:

    Thanks. Exactly what I was looking for. Also works perfectly.

Leave a Reply

Your email address will not be published. Required fields are marked *