玩翻的ViewPager
最近看到很多人發的各式的ViewPager,簡直玩翻,今天我就剖析下ViewPager,爲什麼能玩這麼嗨
讓大家也能創造出各式各樣的Viewpager
其實ViewPager的核心玩法是一個方法public void setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer);
關鍵就是第二個參數,這就是PageTransformer,一個接口,咱們需要實現它,這就是我實現的一個類,大家可以用,看看效果
public class My3DTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View page, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
page.setAlpha(1);
page.setPivotX( page.getWidth());
page.setPivotY(page.getHeight()*0.5f);
page.setRotationY(position*90);
} else if (position <= 1) { // (0,1]
page.setAlpha(1);
page.setPivotX(0f);
page.setPivotY(page.getHeight()*0.5f);
page.setRotationY(position*90);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}
其核心就是實現這個transformPage(View page, float position)方法
第一個參數是ViewPager的當前頁面,注意ViewPager每個頁面都會調用這個方法,所以其實page是指當前
頁面(不是你看到的頁面,是調用這個方法的頁面),你的每次滑動,所有沒有銷燬的頁面都會調用這個方法
第二個參數是當前頁面的左上角座標,從-1到1
如圖所示
然後就可以根據屬性動畫做各種動畫啦,發揮各位創造力的時候到了