ViewPager實現滑動翻頁效果,viewpager滑動翻頁

來源:互聯網
上載者:User

ViewPager實現滑動翻頁效果,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;            @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,以上實現的是翻頁效果是:上面一頁被滑出介面時,下面一頁慢慢顯現,透明度慢慢加大,並且大小由小慢慢變大。

不過有一個奇怪的現象,當我做一個答題介面時,剛剛開始我採用ViewPager與View結合實現無限迴圈切換,並且採用上面的動畫效果,可是每當我滑動到最後一張,也就是要開始新的一輪迴圈的時候,被滑出去的一頁也會出現慢慢變透明的情況,而我用ViewPager結合Fragment實現無限迴圈切換的是就不會出現這種效果

如果想要實現仿造駕考寶典的翻頁效果,只要把核心方法改為以下代碼便可以了

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]這個區間 , 其他兩個的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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.