ViewPager实现滑动翻页效果
?
實現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;@Overridepublic 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 pageview.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,以上實現的是翻頁效果是:上面一頁被滑出界面時,下面一頁慢慢顯現,透明度慢慢加大,并且大小由小慢慢變大。
不過有一個奇怪的現象,當我做一個答題界面時,剛剛開始我采用ViewPager與View結合實現無限循環切換,并且采用上面的動畫效果,可是每當我滑動到最后一張,也就是要開始新的一輪循環的時候,被滑出去的一頁也會出現慢慢變透明的情況,而我用ViewPager結合Fragment實現無限循環切換的是就不會出現這種效果
后來發現大概是因為我在適配器里面加上了下面這個方法才會造成上面的奇怪現象,所以下面的方法不能寫下
?
// PagerAdapter只緩存三張要顯示的圖片,如果滑動的圖片超出了緩存的范圍,就會調用這個方法,將圖片銷毀//在這里不能重寫 // @Override public void destroyItem(ViewGroup container, int position, Object object) { //// super.destroyItem(container, position, object); // }?
?
如果想要實現仿造駕考寶典的翻頁效果,只要把核心方法改為以下代碼便可以了
setPageTransformer(true, new PageTransformer() {private static final float MIN_SCALE = 0.75f;@Overridepublic 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 pageview.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 transitionview.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]這個區間 , 其他兩個的View都已經看不到了~~
?
假設現在ViewPager在A頁現在滑出B頁,則:
A頁的position變化就是( 0, -1]
B頁的position變化就是[ 1 , 0 ]
參考博客:http://blog.csdn.net/lmj623565791/article/details/40411921
??????????????? http://www.jianshu.com/p/251592d3ec62
轉載于:https://www.cnblogs.com/tangZH/p/6516690.html
總結
以上是生活随笔為你收集整理的ViewPager实现滑动翻页效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 24:蛇形填充数组
- 下一篇: 使用xtrabackup对MySQL进行