實現(xiàn)ViewPager的滑動翻頁效果可以使用ViewPager的setPageTransformer方法,如下:
import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.View;public class ReadViewPager extends ViewPager{ public ReadViewPager(Context context) { super(context); } public ReadViewPager(Context context, AttributeSet attrs) { super(context, attrs); setAnima(); } public void setAnima() { setPageTransformer(true, new PageTransformer() { private static final float MIN_SCALE = 0.75f; @Override public void transformPage(View view, float position) { int pageWidth = view.getWidth(); int pageHeight =view.getHeight(); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1); } else if (position <= 1) { // (0,1] // Fade the page out. view.setAlpha(1 - position);//// // Counteract the default slide transition// view.setAlpha(1); view.setTranslationX(pageWidth * -position);//// // Scale the page down (between MIN_SCALE and 1) float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } } }); }}核心代碼是android官方demo,以上實現(xiàn)的是翻頁效果是:上面一頁被滑出界面時,下面一頁慢慢顯現(xiàn),透明度慢慢加大,并且大小由小慢慢變大。
不過有一個奇怪的現(xiàn)象,當我做一個答題界面時,剛剛開始我采用ViewPager與View結合實現(xiàn)無限循環(huán)切換,并且采用上面的動畫效果,可是每當我滑動到最后一張,也就是要開始新的一輪循環(huán)的時候,被滑出去的一頁也會出現(xiàn)慢慢變透明的情況,而我用ViewPager結合Fragment實現(xiàn)無限循環(huán)切換的是就不會出現(xiàn)這種效果
如果想要實現(xiàn)仿造駕考寶典的翻頁效果,只要把核心方法改為以下代碼便可以了
setPageTransformer(true, new PageTransformer() { private static final float MIN_SCALE = 0.75f; @Override public void transformPage(View view, float position) { int pageWidth = view.getWidth(); int pageHeight =view.getHeight(); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1); } else if (position <= 1) { // (0,1] // Fade the page out.// view.setAlpha(1 - position);//// // Counteract the default slide transition view.setAlpha(1); view.setTranslationX(pageWidth * -position);//// // Scale the page down (between MIN_SCALE and 1)// float scaleFactor = MIN_SCALE// + (1 - MIN_SCALE) * (1 - Math.abs(position));// view.setScaleX(scaleFactor);// view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } } });下面我們來講講position參數:
position的可能性的值有:
[-Infinity,-1) 已經看不到了
(1,+Infinity] 已經看不到了
[-1,1]
重點看[-1,1]這個區(qū)間 , 其他兩個的View都已經看不到了~~
假設現(xiàn)在ViewPager在A頁現(xiàn)在滑出B頁,則:
A頁的position變化就是( 0, -1]
B頁的position變化就是[ 1 , 0 ]
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答