【问题标题】:ViewPager margin in PageTransformer transformationsPageTransformer 转换中的 ViewPager 边距
【发布时间】:2013-10-03 12:27:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    改成

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

    第一个参数是绘制顺序

    【讨论】:

      【解决方案2】:

      尝试将此代码用于视图页面的转换阶段:

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

      希望这会有所帮助...

      【讨论】:

      • 从安卓开发者网站复制粘贴对任何人都没有帮助。尝试理解问题,然后发表评论。
      猜你喜欢
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多