Swipe Detection
suggest changepublic 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"); } });
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents