android右上、右下、左上、左下手势滑动判断

1,750 阅读1分钟

中学的数学坐标图

在进行android开发过程中,我们有时会遇到一个界面需要手势的情况。但是看网上大多写上下左右的手势判断,就感觉很死板。非得要用户直上直下,平左右的滑动,不能有一点偏差,不然手势就不精确了。所以也就自己来重新写一个区域的滑动方位,也是对自己知识的一个记录。

∠a = 30° 则∠a对边为斜边的一半。则这个扇形区域则是滑动范围(上下左右)。如果针对多方位滑动,包含左上,右上等。则它的对边大小应该为 1/2 < b < 2,滑动范围就是这个区域内。

自己画的图,不好看。这货绝对大于30度了。不要介意

//这是针对多方位滑动的
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;
        }
    }