ViewPager自帶了一種默認的頁面滑動切換動畫,但是如果產品想要更炫的滑動效果的時候怎么辦呢?不要怕,我們可以使用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)方法有兩個參數,page參數代表當前view 或 fragment,position參數就是它的位置的值?;瑒拥臅r候,起始page和目標page的各自的transformPage()就會被同時觸發調用。一個page的position為0代表它處于中間,為1代表它完全處于右邊,為-1代表它完全處于左邊。
官方文檔是這樣說的,position是一個page相對于屏幕中心的位置。position的值跟隨用戶滑動page而變化。當page填充屏幕完全可見的時候,它的position是0;page位于屏幕右邊,它的position是1。兩個page同時滑動到一半的時候,左邊page的position是-0.5,右邊page的position是0.5。(因為左右是對稱的)所以,為了不考慮正負值,我們取position的絕對值:
final float normalizedposition = Math.abs(Math.abs(position) - 1);現在左右兩個page各自有了一個0到1之間的normalizedposition值(左邊在遞減[1,0],右邊在遞增[0,1]),怎么用就靠你了。比如,首先,我們可以做一個淡入淡出效果。
@Overridepublic void transformPage(View page, float position) { final float normalizedposition = Math.abs(Math.abs(position) - 1); page.setAlpha(normalizedposition);}尺寸大小變化效果:
@Overridepublic 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軸方向旋轉30度:
@Overridepublic void transformPage(View page, float position) { page.setRotationY(position * -30);}上面是一些簡單的例子,這里官方給了兩個例子。也可以把PagerTransformer和PagerTitleStrip/ PagerTabStrip結合在一起。
原文 http://andraskindler.com/blog/2013/create-viewpager-transitions-a-pagertransformer-example/young YoungPeanut.github.io博客 http://youngpeanut.github.io/2016-01-17/android-viewpager-transform/新聞熱點
疑難解答