gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:49 24 4
gpt4 key购买 nike

我正在尝试创建一些可以在 viewpager 上显示我的页面的东西,以使其具有良好的感觉和设计,我检查了这个 link以某种方式帮助并遵循此link关于如何实现它,但我遇到了一些问题。首先,对于运行在 API11 以下的设备(API8 是我的目标),它不会真正工作或看起来那么好。其次是我无法使焦点页面大于下一页和上一页。为了设计,我希望它看起来像这样:

enter image description here

希望有人可以帮助我实现这一点或任何其他方式。

最佳答案

阅读this第一的。然后应用您自己的 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);
}
}
}

您还需要控制子绘图顺序以将当前选定的 View 设置在顶部(仅当您的 View 相互重叠时才需要):

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

如果屏幕上有更多可见页面,请将 ViewPager.setOffscreenPageLimit 设置为 2 或更多。

结果如下:

Result animation

关于android - 如何实现显示上一页和下一页以及更大焦点页面的 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25439543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com