像Gallery应用程序一样的ViewPager动画

时间:2014-04-29 19:00:02

标签: android animation android-viewpager

我试图更改我的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功能的引用。

1 个答案:

答案 0 :(得分:0)

结果很容易。它位于android开发者网站的演示中。

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(深度页变换器)。