兩行代碼搞定ViewPager的過渡動畫

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參數就是它的位置的值。滑動的時候,起始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]),怎麼用就靠你了。比如,首先,我們可以做一個淡入淡出效果。

@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軸方向旋轉30度:

@Override
public 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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章