PageTransformer转换中的ViewPager余量

我有一个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上有一个缩小的效果,我可以看到当前卡的缩放时间,可画边距低于屏幕上的当前卡。 下面是一张照片来描述发生了什么事情:

图片

蓝卡在红卡顶部从右向左刷卡。 由于红牌有一个比例尺的转换,我们可以看到它背后的黑色边缘。

有没有办法迫使可绘制的边缘在红卡的顶部? 这不应该是默认的行为?

Solutions Collecting From Web of "PageTransformer转换中的ViewPager余量"

改成

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

第一个参数是绘图顺序

尝试使用此代码来查看页面的转换阶段:

 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); } } 

希望这可以帮助…