10

各ビューがデッキ上のカードの表現である ViewPager があります。各カードには、ViewPager マージンを使用して境界線に影があります。

cardsViewPager.setPageMargin(getResources().getDisplayMetrics().widthPixels / 20);
cardsViewPager.setPageMarginDrawable(R.drawable.shadow);

そして、それは期待どおりに機能します。

しかし、右側のカードが左側のカードの上に積み重なるように PageTransformer を追加すると、次のようになります。

public class ScalePageTransformer implements PageTransformer {  
    private final ViewPager mViewPager;

    public ScalePageTransformer(ViewPager viewPager) {
        this.mViewPager = viewPager;
    }

    @Override
    public void transformPage(View page, float position) {
        if (position <= 0) {
            int pageWidth = mViewPager.getWidth();
            final float translateValue = position * -pageWidth;
            if (translateValue > -pageWidth) {
                page.setTranslationX(translateValue);
            } else {
                page.setTranslationX(0);
            }
        }
    }
}

私はこれを行います:

cardsViewPager.setPageTransformer(false, new ScalePageTransformer(cardsViewPager));

しかし今、マージンは表示されません。PageTransformer にズームアウト効果があった場合、現在のカードが縮小されているときに、margin drawable が画面上の現在のカードの下にあることがわかります。何が起こっているかを説明するための写真を次に示します。

画像

青いカードが赤いカードの上に右から左にスワイプされています。赤いカードにはスケール変換があるため、その後ろに黒い描画可能な余白が表示されます。

マージンドローアブルをレッドカードの上に強制する方法はありますか? これはデフォルトの動作ではないでしょうか?

4

2 に答える 2

0

への変更

cardsViewPager.setPageTransformer(true, new ScalePageTransformer(cardsViewPager));

最初の引数は描画順です

于 2015-11-11T07:31:14.913 に答える