【问题标题】:ViewPager animation like Gallery appViewPager 动画,如 Gallery 应用程序
【发布时间】:2014-04-29 19:00:02
【问题描述】:

我正在尝试更改我的 ViewPager 过渡动画。 当您从一张照片切换到下一张照片时,我希望具有与默认画廊相同的行为。它基本上是一个动画,当前页面向左移动,而下一个页面从后面过来并变大。

我发现我可以使用 PageTransformer 更改动画。

pager.setPageTransformer(false, new PageTransformer() {

        @Override
        public void transformPage(View page, float position) {
            if (position < 0) {

            } else {
                final float normalizedposition = Math.abs(Math.abs(position) - 1);
                page.setScaleX(normalizedposition / 2 + 0.5f);
                page.setScaleY(normalizedposition / 2 + 0.5f);
            }
        }
    });

这样,我让当前页面向左滑动,没关系。 新页面从小开始并不断增长,这也没关系。但是,页面从右到中。我想删除翻译并将其放在中间,但很小,被当前页面隐藏。

如果我添加page.setTranslationX(1080 * (-(position)));,那么接下来的页面将停留在屏幕中间,但它们始终在当前页面上方可见。如果我还向页面添加 alpha,则显示的页面不会隐藏在旧页面后面。

我已尝试检查图库应用的源代码,但没有找到对 transformPage 函数的任何引用。

【问题讨论】:

    标签: android animation android-viewpager


    【解决方案1】:

    结果很容易。它在 android developerper 网站的演示中。

    public class DepthPageTransformer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.75f;
    
    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();
    
        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);
    
        } else if (position <= 0) { // [-1,0]
            // Use the default slide transition when moving to the left page
            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(1);
            view.setScaleY(1);
    
        } else if (position <= 1) { // (0,1]
            // Fade the page out.
            view.setAlpha(1 - position);
    
            // Counteract the default slide transition
            view.setTranslationX(pageWidth * -position);
    
            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);
    
        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }
    }
    

    参见here(深度页面转换器)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2011-07-31
      相关资源
      最近更新 更多