我正在尝试实施一个与标有ViewPager.PageTransformer
的{{3}}几乎相同的DepthPageTransformer
(位于页面底部)。
然而,不是让层次结构遵循z-index从左到右减小的模式(即从右下方显示的视图),我希望z-index从左到右增加(视图到左边将出现在下面)。
作为第一次尝试,我基本上交换了代表从左侧和右侧进入的页面的示例中的代码,但我发现有一个隐式的z排序,左边的页面总是右上方的页面,当您向右滑动以查看页面时,它将会正常滑动,但消失的视图将在新输入的视图的“顶部”消失。
有没有办法调整 ViewPager
提供的网页的z-indices?
我的第一直觉是以某种方式从支持库中复制ViewPager
代码,并修改类以进行我的出价,但我不清楚该类中隐含排序的来源。
这是我的(主要被扯掉)PageTransformer
:
public class DepthPageTransformer implements ViewPager.PageTransformer {
private static float MIN_SCALE = 0.75f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
view.setAlpha(1 + position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else if (position <= 1) { // (0,1]
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
答案 0 :(得分:12)
ViewPager页面的绘制顺序由ViewPager.setPageTransformer()
方法的第一个参数决定。
请参阅方法签名:
public void setPageTransformer (boolean reverseDrawingOrder, ViewPager.PageTransformer transformer)
reverseDrawingOrder
参数文档说:“如果提供的PageTransformer要求页面视图从上到下而不是从头到尾,则为true。”
在内部,当确定ViewPager页面绘制顺序时,它会调用:
protected int getChildDrawingOrder(int childCount, int i) {
final int index = mDrawingOrder == DRAW_ORDER_REVERSE ? childCount - 1 - i : i;
final int result = ((LayoutParams) mDrawingOrderedChildren.get(index).getLayoutParams()).childIndex;
return result;
}
mDrawingOrder由ViewPager.setPageTransformer()
答案 1 :(得分:0)
你可以使用.bringToFront();方法