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 上有一个缩小效果,我可以看到当前卡片何时被缩小,可绘制的边距低于屏幕上的当前卡片。这是一张图片来描述正在发生的事情:

图片

蓝卡在红卡上从右向左刷。由于红牌有比例变换,我们可以看到它后面的黑色可绘制边距。

有没有办法强制可抽取的保证金位于红牌之上?这不应该是默认行为吗?

4

2 回答 2

0

改成

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

第一个参数是绘图顺序

于 2015-11-11T07:31:14.913 回答
-3

尝试将此代码用于 View Pages 的转换阶段:

private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;

public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();
    int pageHeight = view.getHeight();

    if (position < -1) { // [-Infinity,-1)
        // This page is way off-screen to the left.
        view.setAlpha(0);

    } else if (position <= 1) { // [-1,1]
        // Modify the default slide transition to shrink the page as well
        float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
        float vertMargin = pageHeight * (1 - scaleFactor) / 2;
        float horzMargin = pageWidth * (1 - scaleFactor) / 2;
        if (position < 0) {
            view.setTranslationX(horzMargin - vertMargin / 2);
        } else {
            view.setTranslationX(-horzMargin + vertMargin / 2);
        }

        // Scale the page down (between MIN_SCALE and 1)
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);

        // Fade the page relative to its size.
        view.setAlpha(MIN_ALPHA +
                (scaleFactor - MIN_SCALE) /
                (1 - MIN_SCALE) * (1 - MIN_ALPHA));

    } else { // (1,+Infinity]
        // This page is way off-screen to the right.
        view.setAlpha(0);
    }
}

希望这可以帮助...

于 2014-03-01T07:26:54.270 回答