Android 自定義ViewPager酷炫切換動畫

首先看一下ViewPager自帶的滑動效果:

這裏寫圖片描述

那麼如何打造屬於自己的切換效果呢?
當viewpager上一個可見或依附的頁面發生了滾動事件就會調用PageTransformer,這讓應用可以使用自定義transformation讓viewpager某一個頁面視圖上實現某些特定的動畫屬性。

只需要一行代碼就可以實現自定義動畫切換功能,
類似於下面的代碼:

mPager.setPageTransformer(true, new Transformation());

如果要自定義切換,需要實現transformPage ,先看一下這個方法的參數:

void transformPage (View page, float position)

view指的是當前切換動畫應用的view,
position比較特殊:
一:當前頁面爲0,左邊的頁面爲-1,右邊的頁面爲1
二:當前頁面左滑,是一個從0到-1的過程,右滑是從0到1的過程

下面介紹一種我比較喜歡的動畫效果:
這裏寫圖片描述
直接上代碼:

    private float mMinAlpha = 0.6f;
    private float transitionY = 90.0f;

    /**
     * @param page
     * @param position
     */
    @Override
    public void transformPage(View page, float position) {
        if (position <= -1 || position >= 1){//中間兩邊的ViewPager,已經徹底移出
            page.setAlpha(mMinAlpha);
            page.setTranslationY(transitionY);
        } else if (position < 1) {//範圍是:[-1,1]
            //從中間向左或向右一點點移動
            if (position > -1&&position < 0) {
                float factor = mMinAlpha + (1 - mMinAlpha) * (1 + position);
                float realTransition = transitionY *(-1 * position);
                page.setAlpha(factor);
                page.setTranslationY(realTransition);
            }else if(position < 1 && position > 0){
                float factor = mMinAlpha + (1 - mMinAlpha) * (1 - position);
                float realTransition = transitionY * position;
                page.setAlpha(factor);
                page.setTranslationY(realTransition);
            }
        }
    }

下面再看一種效果:
這裏寫圖片描述

代碼:

    @Override
    protected void onTransform(View view, float position) {
        view.setPivotX(position < 0f ? view.getWidth() : 0f);
        view.setPivotY(view.getHeight() * 0.5f);
        view.setRotationY(90f * position);
    }

    @Override
    public boolean isPagingEnabled() {
        return true;
    }

除了以上兩種效果,還有十幾種酷炫的效果,有興趣的可以在自己的項目中試試,
我把它做成了一個第三方的Library:

使用:
1.在整個項目的build.gradle中添加:

allprojects {
    repositories {
        jcenter()
        maven { url 'https://www.jitpack.io' }
    }
}

2.在app Module的build.gradle中添加:

compile 'com.github.ckwcc:ViewPagerTransformer:1.0.2'

3.使用:

viewPager.setPageTransformer(true,new xxxTransformer());

只要打出Transformer,彈出的提示項裏面就會有各種可供選擇的切換效果啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章