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);
}
}
Android Fling Detection
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:
Labels:
android,
java,
open source,
recipes
Subscribe to:
Post Comments (Atom)
thank you for sharing.
ReplyDelete