0

以下のように定義されたカスタム PageTransformer を使用して、ViewPager にフラグメントのスタックがあります。

mPager.setPageTransformer(true, new ViewPager.PageTransformer() {
    @Override
    public void transformPage(View page, float position) {
        page.setTranslationX(page.getWidth() * -position);
    }
}); 

出発フラグメントの影を描くにはどうすればよいですか? 簡単に言えば、私は Play Book のようなものを探しています。カール効果は必要ありません。スタックの一番上にある要素の影だけで、できれば API 18 に準拠しています。

ありがとうございました

4

1 に答える 1

1

着信ビューにアルファ透明度がある場合にのみ機能するため、setPageMarginについて疑問がありました。つまり、マージンの高さが間違っていて、入ってくるビューの下に立っているようですが、妥協点を見つけたのかもしれません

ここに画像の説明を入力

これは、マージンとカスタムPageTransformerのアクティビティのコードです。

    int margin = getResources().getDisplayMetrics().widthPixels / 15;
    mPager = (ViewPager) findViewById(R.id.pager);

    mPager.setPageMargin(margin);
    mPager.setPageMarginDrawable(R.drawable.shadow);
    mPager.setPageTransformer(true, new StackTransformer());

ドローアブルは次のように定義されます

    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
       android:shape="rectangle" >
        <gradient
            android:angle="360"
            android:endColor="#00000000"
            android:startColor="#aa000000"
            android:type="linear" />
    </shape>

最後に、PageTransformerのtransformPageメソッド。位置とアルファをいじって、許容できる効果を見つけました。

@Override
public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();
    if (position < -1) {
        view.setAlpha(0);
    } else if (position <= 0) { 
        view.setAlpha(1);
        view.setTranslationX(0);
    } else if (position <= 1) { 
        view.setAlpha(1-position/2); // divide by 2 is the trick
        view.setTranslationX(pageWidth * -position);
    } else { 
        view.setAlpha(0);
    }
}

結果として得られる効果は、上の gif に表示されているものですが、この効果を実現するためのより良い方法があると確信しています。

于 2016-10-31T10:22:29.097 に答える