我试图更改我的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
功能的引用。
答案 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(深度页变换器)。