5

ここにあるラベルの付いViewPager.PageTransformerた例とほぼ同じものを実装しようとしています(ページの下部にあります)。DepthPageTransformer

ただし、階層をz-indexが左から右に減少するパターンに従う(つまり、右のビューが下から表示される)のではなく、z-indexを左から右に増加させたい(左のビューは下から表示されます)。

最初の試みとして、基本的に左から入ってくるページと右から入ってくるページを表す例のコードを交換しましたが、左側のページが常に右側のページのにくるような暗黙のz順序があることがわかりました、スワイプして右のページを表示すると、ページはうまくスライドしますが、消えたビューは、新しく入力したビューの「上」に消えます。

によって提供されるページのzインデックスを調整する方法はあります 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);
        }
    }
}
4

2 に答える 2

13

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は、のreverseDrawingOrderブールフラグによって内部的に設定されます。ViewPager.setPageTransformer()

于 2013-03-29T16:14:17.867 に答える
0

.bringToFront();を使用できます。方法。

于 2014-01-10T13:10:13.463 に答える