如何在ViewPager中创建平滑滑动?

san*_*one 0 android android-layout swipe-gesture

我需要在应用程序中对代码进行滑动.但是,使用ViewPager不适合设计,所以我必须编写滑动逻辑.

我过去已经做过几十次了Gestures,但滑动从来没有像ViewPager例如那样平滑.这不可靠.有时它工作正常,但经常无法识别滑动因此我不得不再次滑动.另一个问题是滑动操作会调用"拉动刷新"指示器,因此滑动不会再次激活.

有没有完美的刷卡逻辑库?如果没有,我会发布我经常使用的滑动逻辑,这样你就可以告诉我它的缺陷了.

Nom*_*que 5

这是我的onSwipeTouchListener班级.

public class OnSwipeTouchListener implements View.OnTouchListener {

private GestureDetector gestureDetector;

public OnSwipeTouchListener(Context c) {
    gestureDetector = new GestureDetector(c, new GestureListener());
}

public boolean onTouch(final View view, final MotionEvent motionEvent) {
    return gestureDetector.onTouchEvent(motionEvent);
}

private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

    private static final int SWIPE_THRESHOLD = 10;
    private static final int SWIPE_VELOCITY_THRESHOLD = 10;

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        onClick();
        return super.onSingleTapUp(e);
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        onDoubleClick();
        return super.onDoubleTap(e);
    }

    @Override
    public void onLongPress(MotionEvent e) {
        onLongClick();
        super.onLongPress(e);
    }

    // Determines the fling velocity and then fires the appropriate swipe event accordingly
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        boolean result = false;
        try {
            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) {
                        onSwipeDown();
                    } else {
                        onSwipeUp();
                    }
                }
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return result;
    }
}

public void onSwipeRight() {
}

public void onSwipeLeft() {
}

public void onSwipeUp() {
}

public void onSwipeDown() {
}

public void onClick() {

}

public void onDoubleClick() {

}

public void onLongClick() {

}
Run Code Online (Sandbox Code Playgroud)

}

这是你如何使用它.

mainView.setOnTouchListener(new OnSwipeTouchListener(getActivity()) {

        @Override
        public void onSwipeUp() {
               // Do Stuff here
        }

        @Override
        public void onClick() {
                // Do Stuff here

        }
    });
Run Code Online (Sandbox Code Playgroud)

它很顺利.我尝试了很多其他的例子,但这是最好的例子.您还可以设置滑动手势的阈值.您需要做的就是更改这些变量.

private static final int SWIPE_THRESHOLD = 10;
private static final int SWIPE_VELOCITY_THRESHOLD = 10;
Run Code Online (Sandbox Code Playgroud)

它可以检测LeftSwipe,RightSwipe,UpSwipe,DownSwipe,OnClick,OnDoubleClickOnLongClick.

我用这个类来改变片段UpSwipeDownSwipe手势.