在android中的屏幕边距上滑动到左侧,顶部,右侧,底部

时间:2014-11-14 08:15:43

标签: android swipe gesture swipe-gesture

我正在进行滑动手势。实际上我想限制滑动,如果触摸坐标>点击屏幕的左右边缘(100像素),如

如果我从左向右滑动并触摸坐标>从屏幕左侧Top 100px我想限制滑动

如果从右向左滑动并触摸坐标

顶部和底部滑动没有限制。

这是我尝试的代码:

    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();
                    }
                }
            }

3 个答案:

答案 0 :(得分:3)

检查这可能会对您有所帮助

https://github.com/daimajia/AndroidSwipeLayout

其库预定义滑动实现

答案 1 :(得分:0)

您可以使用SimpleOnGestureListener中的onFling方法计算此值。请检查以下问题:

Android: How to handle right to left swipe gestures

答案 2 :(得分:0)

有一个很棒的帖子可以获取siplay指标:Get screen dimensions in pixels。我不确定我是否完全低估了沿着屏幕的侧面滑动的意义(右边的一根手指,左边的另一根可能?)但是我认为在你的情况下它应该是这样的:

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;

        PointF p1 = new PointF(e1.getX(), e1.getY());
        PointF p2 = new PointF(e2.getX(), e2.getY());

        if ((p1.x < 100 || p1.x > width - 100) && (p2.x < 100 || p2.x > width - 100))
        {

        float diffY = p2.y - p1.y;
        float diffX = p2.x - p1.x;

        int dirY = (diffY < 0) ? -1 : 1;
        int dirX = (diffX < 0) ? -1 : 1;

        diffY = Math.abs(diffY); diffX = Math.abs(diffX); 
        if (diffX > diffY) {
            if (diffX > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {

                if (dirX > 0) {
                    onSwipeRight();
                } else {
                    onSwipeLeft();
                }
            }
        } else {
            if (diffY > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                if (dirY > 0) {
                    onSwipeBottom();
                } else {
                    onSwipeTop();
                }
            }
        }
        }