package github.nisrulz.sample.gesturedetection;
import android.os.Bundle;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
public class MainActivity extends AppCompatActivity {
//gesture detector
private GestureDetectorCompat gDetect;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gDetect = new GestureDetectorCompat(this, new GestureListener());
}
@Override public boolean onTouchEvent(MotionEvent event) {
gDetect.onTouchEvent(event);
return super.onTouchEvent(event);
}
public class GestureListener extends GestureDetector.SimpleOnGestureListener {
private float flingMin = 100;
private float velocityMin = 100;
//user will move forward through messages on fling up or left
boolean forward = false;
//user will move backward through messages on fling down or right
boolean backward = false;
@Override public boolean onDoubleTap(MotionEvent e) {
System.out.println("On Double Tap");
return super.onDoubleTap(e);
}
@Override public boolean onDown(MotionEvent e) {
System.out.println("On Down");
return super.onDown(e);
}
@Override public void onLongPress(MotionEvent e) {
System.out.println("On Long Press");
super.onLongPress(e);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//calculate the change in X position within the fling gesture
float horizontalDiff = e2.getX() - e1.getX();
//calculate the change in Y position within the fling gesture
float verticalDiff = e2.getY() - e1.getY();
float absHDiff = Math.abs(horizontalDiff);
float absVDiff = Math.abs(verticalDiff);
float absVelocityX = Math.abs(velocityX);
float absVelocityY = Math.abs(velocityY);
if (absHDiff > absVDiff && absHDiff > flingMin && absVelocityX > velocityMin) {
//move forward or backward
if (horizontalDiff > 0) {
backward = true;
} else if (absVDiff > flingMin && absVelocityY > velocityMin) {
if (verticalDiff > 0) {
backward = true;
} else {
forward = true;
}
}
}
//user is cycling forward through messages
if (forward) {
System.out.println("user is cycling forward through messages");
}
//user is cycling backwards through messages
else if (backward) {
System.out.println("user is cycling backwards through messages");
}
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
System.out.println("Scrolling");
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override public boolean onSingleTapConfirmed(MotionEvent e) {
System.out.println("On Single Tap");
return super.onSingleTapConfirmed(e);
}
@Override public boolean onSingleTapUp(MotionEvent e) {
System.out.println("On Single Tap Up");
return super.onSingleTapUp(e);
}
}
}