Android 如何实现显示上一页和下一页以及更大焦点页面的ViewPager

Android 如何实现显示上一页和下一页以及更大焦点页面的ViewPager,android,android-viewpager,Android,Android Viewpager,我正在尝试创建一些东西,将我的页面显示在一个viewpager上,让它有很好的感觉和设计,我检查了这一点,不知何故,这有助于我如何实现它,但我最终遇到了一些问题。首先,对于运行在API11以下的设备(API8是我的目标),它不会真正起作用,也不会看起来很好。第二,我无法使重点页面比下一页和上一页更大。为了设计,我希望它看起来像这样: 希望有人能在这方面或任何其他方面帮助我实现这一目标。请先阅读。然后应用您自己的PageTransformer实现。大概是这样的: public class Dep

我正在尝试创建一些东西,将我的页面显示在一个viewpager上,让它有很好的感觉和设计,我检查了这一点,不知何故,这有助于我如何实现它,但我最终遇到了一些问题。首先,对于运行在API11以下的设备(API8是我的目标),它不会真正起作用,也不会看起来很好。第二,我无法使重点页面比下一页和上一页更大。为了设计,我希望它看起来像这样:

希望有人能在这方面或任何其他方面帮助我实现这一目标。

请先阅读。然后应用您自己的
PageTransformer
实现。大概是这样的:

public class DepthPageTransformer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.5f;
    private static final float MAX_SCALE = 0.8f;
    private static final float MIN_FADE = 0.2f;

    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();

        if (position < -1) {
            view.setAlpha(MIN_FADE);
        } else if (position < 0) {
            view.setAlpha(1 + position * (1 - MIN_FADE));
            view.setTranslationX(-pageWidth * MAX_SCALE * position);
            ViewCompat.setTranslationZ(view, position);
            float scaleFactor = MIN_SCALE
                    + (MAX_SCALE - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);
        } else if (position == 0) {
            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(MAX_SCALE);
            ViewCompat.setTranslationZ(view, 0);
            view.setScaleY(MAX_SCALE);
        } else if (position <= 1) {
            ViewCompat.setTranslationZ(view, -position);
            view.setAlpha(1 - position * (1 - MIN_FADE));
            view.setTranslationX(pageWidth * MAX_SCALE * -position);

            float scaleFactor = MIN_SCALE
                    + (MAX_SCALE - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);
        } else {
            view.setAlpha(MIN_FADE);
        }
    }
}
如果屏幕上有更多可见页面,请将
ViewPager.setOffscreenPageLimit
设置为2或更多

结果如下:


试试这个:)或者使用这个Hi@deniz,谢谢你的评论,但不确定这是否是我需要的。见我对下面答案的评论。谢谢尝试了迄今为止的第一个链接。它可以工作,但不能满足我需要的感觉,而且还缺少关于如何使用的文档。还锁定了进一步定制的可能性。继续下一个链接。@Artkoneng您能提供此代码的完整示例吗?剩下的很明显:您需要一个带有
MyPager
和PagerAdapter的布局,谢谢。但我无法从中心获得翻译和缩放。它来自底部您知道如何为ViewPager2实现相同的功能吗?因为ViewPager2类是final类,所以不能重写getChildDrawingOrder方法。
public class MyPager extends ViewPager {
    public MyPager(Context context) {
        this(context, null);
    }

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

    @Override
    protected int getChildDrawingOrder(int childCount, int i) {
        if(i == childCount - 1) {
            return getCurrentItem();
        } else {
            return i >= getCurrentItem()? i + 1 : i;
        }
    }
}