
在进行android开发过程中,我们有时会遇到一个界面需要手势的情况。但是看网上大多写上下左右的手势判断,就感觉很死板。非得要用户直上直下,平左右的滑动,不能有一点偏差,不然手势就不精确了。所以也就自己来重新写一个区域的滑动方位,也是对自己知识的一个记录。
∠a = 30° 则∠a对边为斜边的一半。则这个扇形区域则是滑动范围(上下左右)。如果针对多方位滑动,包含左上,右上等。则它的对边大小应该为 1/2 < b < 2,滑动范围就是这个区域内。

//这是针对多方位滑动的
int FLIP_DISTANCE = 130;
class SufaceControll implements GestureDetector.OnGestureListener {
@Override
public boolean onDown(MotionEvent motionEvent) {
return false;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float v, float v1) {
if (e1.getX() - e2.getX() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) > 0.5
&& Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) < 2 && e2.getY() - e1.getY() > 0) {
TipUtil.show(this, "左下滑动");
return true;
}
if (e1.getX() - e2.getX() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) > 0.5
&& Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) < 2 && e2.getY() - e1.getY() < 0) {
TipUtil.show(this, "左上滑动");
return true;
}
if (e2.getX() - e1.getX() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) > 0.5
&& Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) < 2 && e2.getY() - e1.getY() > 0) {
TipUtil.show(this, "右下滑动");
return true;
}
if (e2.getX() - e1.getX() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) > 0.5
&& Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) < 2 && e2.getY() - e1.getY() < 0) {
TipUtil.show(this, "右上滑动");
return true;
}
if (e1.getX() - e2.getX() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) > 2) {
TipUtil.show(this, "向左滑动");
return true;
}
if (e2.getX() - e1.getX() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) > 2) {
TipUtil.show(this, "向右滑动");
return true;
}
if (e1.getY() - e2.getY() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) < 0.5) {
TipUtil.show(this, "向上滑动");
return true;
}
if (e2.getY() - e1.getY() > FLIP_DISTANCE && Math.abs(e1.getX() - e2.getX()) / Math.abs(e1.getY() - e2.getY()) < 0.5) {
TipUtil.show(this, "向下滑动");
return true;
}
return false;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
}