有什么方法可以改变 viewPager 的滑动方向。我想在向上滑动时更改片段

Is there any method to change the swipe direction of viewPager. I want to change the fragments on swipe up

我想实现在滑动时更改片段 upwards/downwards 但我在 SO 上找到的所有解决方案都仅适用于 RTL,甚至他们只是说要反转 list/fragment。我想要一些可靠的方法来实现它。

这些是我试过的一些链接:

1) Changing viewPager swipe direction

2) Android change default direction swipe of ViewPager

3) how to make my viewpager swipe from right to left

4) how to reverse the direction of viewPager to left to right order?

5) Swipe Direction in ViewPager

6) Android OnTouch swipe up/down direction change

我在大 Google 海洋的某个地方找到了这个。

如果对你有帮助,请告诉我。

public class VerticalViewPager extends ViewPager {

    public VerticalViewPager(Context context) {
        this(context, null);
    }

    public VerticalViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    @Override
    public boolean canScrollHorizontally(int direction) {
        return false;
    }

    @Override
    public boolean canScrollVertically(int direction) {
        return super.canScrollHorizontally(direction);
    }

    private void init() {
        setPageTransformer(true, new VerticalPageTransformer());
        setOverScrollMode(View.OVER_SCROLL_NEVER);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final boolean toIntercept = super.onInterceptTouchEvent(flipXY(ev));
        flipXY(ev);
        return toIntercept;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        final boolean toHandle = super.onTouchEvent(flipXY(ev));
        flipXY(ev);
        return toHandle;
    }

    private MotionEvent flipXY(MotionEvent ev) {
        final float width = getWidth();
        final float height = getHeight();
        final float x = (ev.getY() / height) * width;
        final float y = (ev.getX() / width) * height;
        ev.setLocation(x, y);
        return ev;
    }

    private static final class VerticalPageTransformer implements ViewPager.PageTransformer {
        @Override
        public void transformPage(View view, float position) {
            final int pageWidth = view.getWidth();
            final int pageHeight = view.getHeight();
            if (position < -1) {
                view.setAlpha(0);
            } else if (position <= 1) {
                view.setAlpha(1);
                view.setTranslationX(pageWidth * -position);
                float yPosition = position * pageHeight;
                view.setTranslationY(yPosition);
            } else {
                view.setAlpha(0);
            }
        }
    }
}

像使用 ViewPager 一样使用它。这会将其从水平更改为垂直。