我有一个带有PageTransformer实现的ViewPager,它为ViewPager的下一页做了一些时髦的东西。我的实现如下:
class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@Override
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
} else if (position < 1) { // (0,1]
do some funky stuff to the page currently being scrolled into the main view on scrolling left
} else if (position==1) {
do some funky stuff to the next page
}
else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(1);
}
}
}
问题是这些转换动画在加载寻呼机后立即可用,但它们不能用于我的viewpager的第一个片段。即第一次加载片段时,不会调用transformPage
方法。有没有办法手动调用transformPage
方法?即当我在onCreateView
内设置我的ViewPager时?或者在其他地方?
答案 0 :(得分:3)
我有类似的情况,我最终使用假拖动导致初始变换:
public void onResume() {
...
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
// force transform with a 1 pixel nudge
mViewPager.beginFakeDrag();
mViewPager.fakeDragBy(1.0f);
mViewPager.endFakeDrag();
}
};
handler.postDelayed(r, 10); // some small delay in ms
}
答案 1 :(得分:-1)
根据开发者的网站,
Google Developer
只要滚动可见/附加页面,就会调用PageTransformer。这为应用程序提供了使用动画属性将自定义转换应用于页面视图的机会 因此,第一次加载寻呼机时,您将看不到任何过渡动画。
这是一个很好的黑客,你一直在使用,但我不知道你是否已经尝试过,但是当你第一次加载时,你可以自己动画整个viewpager。