I found existing tutorials on how to do this to be a bit complicated. Here's how to do simple fling detection in four directions:
public interface FlingListener { void onTopToBottom(); void onBottomToTop(); void onLeftToRight(); void onRightToLeft(); } public class FlingDetector { static final int SWIPE_MIN_DISTANCE = 120; static final int SWIPE_MAX_OFF_PATH = 250; static final int SWIPE_THRESHOLD_VELOCITY = 200; private final GestureDetector gestureDetector; public FlingDetector(final FlingListener listener) { gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { if (Math.abs(e1.getX() - e2.getX()) > SWIPE_MAX_OFF_PATH || Math.abs(velocityY) < SWIPE_THRESHOLD_VELOCITY) { return false; } if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE) { listener.onBottomToTop(); } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE) { listener.onTopToBottom(); } } else { if (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY) { return false; } if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) { listener.onRightToLeft(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) { listener.onLeftToRight(); } } return true; } }); } public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } } public class MainActivity extends Activity { private FlingDetector flingDetector; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); flingDetector = new FlingDetector(new FlingListener() { @Override public void onTopToBottom() { } @Override public void onRightToLeft() { } @Override public void onLeftToRight() { } @Override public void onBottomToTop() { } }); } @Override public boolean onTouchEvent(MotionEvent event) { if (flingDetector.onTouchEvent(event)) { return true; } return super.onTouchEvent(event); } }