ViewPagers的隐式Z-Ordering

Dan*_*ith 4 android android-viewpager android-support-library

我正在尝试实现一个ViewPager.PageTransformer几乎与此处标记的示例相同的DepthPageTransformer(它位于页面底部).

然而,除了具有层次结构遵循其中的z-index由左到右(即欣赏到右边会出现在下面)降低的模式,我想的z-index从左至右(浏览次数增加至左侧会从下面出现).

作为第一次尝试,我基本上交换了代表从左侧和右侧进入的页面的示例中的代码,但我发现有一个隐式的z排序,左边的页面总是在右边的页面之上,当你滑动以查看右边的页面时,它会滑动不错,但消失的视图将在新输入的视图的"顶部"消失.

有没有办法调整由a服务的页面的z-indices ViewPager

我的第一直觉是以某种方式复制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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 12

ViewPager页面的绘制顺序由方法的第一个参数确定ViewPager.setPageTransformer().

查看方法签名:

public void setPageTransformer (boolean reverseDrawingOrder, ViewPager.PageTransformer transformer)
Run Code Online (Sandbox Code Playgroud)

reverseDrawingOrder参数文件说:"真要是提供PageTransformer需要从后到前,而不是第一个到最后绘制的页面访问量."

在内部,当确定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;
}
Run Code Online (Sandbox Code Playgroud)

mDrawingOrder由reverseDrawingOrder boolean flag在内部设置 ViewPager.setPageTransformer()