ViewPager在Fragment切換時有默認的動畫效果,項目中可能會遇到需要添加更加炫的Fragment切換效果,ViewPager爲我們提供了相對應的方法,我們只需要定義切換的動畫即可。
第一步:初始化ViewPager,設置adapter
// Instantiate a ViewPager and a PagerAdapter.
mPagerAdapter
= new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
private class
ScreenSlidePagerAdapter
extends
FragmentStatePagerAdapter {
public
ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public
Fragment getItem(int
position) {
ViewPager_Fragment test =
new
ViewPager_Fragment();
test.setPosition(position);
return
test;
}
@Override
public int
getCount() {
return
NUM_PAGES;
}
}
第二步:設置自定義動畫類
mPager.setPageTransformer(true,
new
ZoomOutPageTransformer());
public class
ZoomOutPageTransformer
implements
ViewPager.PageTransformer {
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);
}
}
}