KaH*_*HeL 8 android android-viewpager
我正在尝试创建一些可以在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要控制子绘制顺序以将当前选定的视图设置在顶部(仅当您的视图相互重叠时才需要):
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果屏幕上有更多可见页面,请设置ViewPager.setOffscreenPageLimit为 2 或更多。
结果如下:
| 归档时间: |
|
| 查看次数: |
3565 次 |
| 最近记录: |