ViewPager自帶了一種默認(rèn)的頁面滑動切換動畫慰丛,但是如果產(chǎn)品想要更炫的滑動效果的時候怎么辦呢渣刷?不要怕,我們可以使用support library的 PagerTransformer,API11 (Honeycomb) 及以上android版本都支持這個類。
用法很方便防楷,
viewpager.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(View page, float position) {
// do transformation here
}
});
transformPage(View page, float position)
方法有兩個參數(shù),page參數(shù)代表當(dāng)前view 或 fragment则涯,position參數(shù)就是它的位置的值复局。滑動的時候粟判,起始page和目標(biāo)page的各自的transformPage()就會被同時觸發(fā)調(diào)用亿昏。一個page的position為0代表它處于中間,為1代表它完全處于右邊档礁,為-1代表它完全處于左邊角钩。
官方文檔是這樣說的,position是一個page相對于屏幕中心的位置呻澜。position的值跟隨用戶滑動page而變化递礼。當(dāng)page填充屏幕完全可見的時候,它的position是0羹幸;page位于屏幕右邊宰衙,它的position是1。兩個page同時滑動到一半的時候睹欲,左邊page的position是-0.5供炼,右邊page的position是0.5一屋。(因為左右是對稱的)所以,為了不考慮正負(fù)值袋哼,我們?nèi)osition的絕對值:
final float normalizedposition = Math.abs(Math.abs(position) - 1);
現(xiàn)在左右兩個page各自有了一個0到1之間的normalizedposition值(左邊在遞減[1,0]冀墨,右邊在遞增[0,1]),怎么用就靠你了涛贯。比如诽嘉,首先,我們可以做一個淡入淡出效果弟翘。
@Override
public void transformPage(View page, float position) {
final float normalizedposition = Math.abs(Math.abs(position) - 1);
page.setAlpha(normalizedposition);
}
尺寸大小變化效果:
@Override
public void transformPage(View page, float position) {
final float normalizedposition = Math.abs(Math.abs(position) - 1);
page.setScaleX(normalizedposition / 2 + 0.5f);
page.setScaleY(normalizedposition / 2 + 0.5f);
}
最后一個例子是使page沿Z軸方向旋轉(zhuǎn)30度:
@Override
public void transformPage(View page, float position) {
page.setRotationY(position * -30);
}
上面是一些簡單的例子悦冀,這里官方給了兩個例子。也可以把PagerTransformer和PagerTitleStrip/ PagerTabStrip結(jié)合在一起睛琳。