今天看到鴻洋大神的微信公眾號的推送,有一個打造個性ViewPager的文章,看完之后自己動手寫了一下,發(fā)現(xiàn)ViewPager動畫實(shí)現(xiàn)起來真的沒那么難,咱們就來慢慢分析ViewPager動畫的實(shí)現(xiàn)方法。
VIewPager在會有一個接口是專門為了讓開發(fā)者來解決這個問題的那就是:ViewPager.PageTransformer,這個接口雖然只有一個方法但是那是相當(dāng)?shù)膹?qiáng)大啊,因?yàn)檫@個方法可以獲得你是左滑動還是右邊滑動,而且可以根據(jù)postion來獲取你正在滑動的頁面位置的變化和被迫滑動頁面位置的變化。
什么叫被迫滑動呢?我自己取的一個名字就是你滑動B頁面viewpager會自動的把A頁面移出去這叫被迫滑動?。。。。。?/p>
下面來詳細(xì)分析這個方法:public voidtransformPage(View page,float position)
page:你當(dāng)面所觸碰的view。
position:這個參數(shù)需要舉例才能說的更明白一些,假如:A到B頁面postion的變化過程是這樣的,
A——>postion:0變成-1,當(dāng)成為-1的時候A頁面就完全看不見了
B——>postion:1變成0,當(dāng)成為0的時候B頁面顯示在當(dāng)面頁面上,
也就是說左邊看不見的是-1,能看見的時候?yàn)?,右邊為1。理解了這個那么一些動畫就可以完成了,我看鴻洋的博客,他自定義了一個viewpager來完成了一個動畫效果:

咱們下面就用今天的方法實(shí)現(xiàn)一下這個效果,我這里只貼出PageTransformer的代碼:
public class MyPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View page, float position) {
if (position < -1) {
//這個位置是看不見的
page.setScaleY(1f);
} else if (position <= 1) {
//這個位置是你所能看得見的
if (position < 0) {
//左滑動
//向左邊滑動的時候當(dāng)面圖片是沒有任何的動畫變化的所以不用做動畫//處理
} else if (position == 0) {
/**
當(dāng)前的位置是圖片在頁面上顯示的時候,這里做到讓他充滿整個頁面
**/
page.setScaleY(1f);
} else {
//右滑動
/**
當(dāng)向右滑動的時候讓頁面從X,Y兩個方向壓縮
**/
page.setScaleY(Math.max(1 - Math.abs(position), 0.5f));
page.setScaleX(Math.max(1 - Math.abs(position), 0.5f));
}
} else {
page.setScaleY(0f);
}
}
}
最終這個動畫就完成了,這里只貼出主要的核心代碼。