Gesture Detection
Swipe Detection
Section titled “Swipe Detection”public class OnSwipeListener implements View.OnTouchListener {
private final GestureDetector gestureDetector;
public OnSwipeListener(Context context) { gestureDetector = new GestureDetector(context, new GestureListener()); }
@Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); }
private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_VELOCITY_THRESHOLD = 100; private static final int SWIPE_THRESHOLD = 100;
@Override public boolean onDown(MotionEvent e) { return true; }
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { float diffY = e2.getY() - e1.getY(); float diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) { onSwipeRight(); } else { onSwipeLeft(); } } } else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { if (diffY > 0) { onSwipeBottom(); } else { onSwipeTop(); } } return true; } }
public void onSwipeRight() { }
public void onSwipeLeft() { }
public void onSwipeTop() { }
public void onSwipeBottom() { }
}Applied to a view…
view.setOnTouchListener(new OnSwipeListener(context) { public void onSwipeTop() { Log.d("OnSwipeListener", "onSwipeTop"); } public void onSwipeRight() { Log.d("OnSwipeListener", "onSwipeRight"); } public void onSwipeLeft() { Log.d("OnSwipeListener", "onSwipeLeft"); } public void onSwipeBottom() { Log.d("OnSwipeListener", "onSwipeBottom"); }
});Basic Gesture Detection
Section titled “Basic Gesture Detection”public class GestureActivity extends Activity implements GestureDetector.OnDoubleTapListener, GestureDetector.OnGestureListener {
private GestureDetector mGestureDetector;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mGestureDetector = new GestureDetector(this, this); mGestureDetector.setOnDoubleTapListener(this); }
@Override public boolean onTouchEvent(MotionEvent event){ mGestureDetector.onTouchEvent(event); return super.onTouchEvent(event); }
@Override public boolean onDown(MotionEvent event) { Log.d("GestureDetector","onDown"); return true; }
@Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d("GestureDetector","onFling"); return true; }
@Override public void onLongPress(MotionEvent event) { Log.d("GestureDetector","onLongPress"); }
@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.d("GestureDetector","onScroll"); return true; }
@Override public void onShowPress(MotionEvent event) { Log.d("GestureDetector","onShowPress"); }
@Override public boolean onSingleTapUp(MotionEvent event) { Log.d("GestureDetector","onSingleTapUp"); return true; }
@Override public boolean onDoubleTap(MotionEvent event) { Log.d("GestureDetector","onDoubleTap"); return true; }
@Override public boolean onDoubleTapEvent(MotionEvent event) { Log.d("GestureDetector","onDoubleTapEvent"); return true; }
@Override public boolean onSingleTapConfirmed(MotionEvent event) { Log.d("GestureDetector","onSingleTapConfirmed"); return true; }
}Remarks
Section titled “Remarks”Official Documentation: Detecting Common Gestures