Android–ViewPager切換動畫,PageTransformer,androidviewpager

來源:互聯網
上載者:User

Android–ViewPager切換動畫,PageTransformer,androidviewpager
transformPage(View view, float position)                                         

view就是滑動中的那個view,position這裡是float類型,是當前滑動狀態的一個表示,比如當滑動到正全屏時,position是0,如果前一頁和下一頁基本各在螢幕佔一半時,前一頁的position是-0.5,後一頁的posiotn是0.5(是-0.5還是0.5要看當前的view是前面那一頁的view還是後面那一頁的),所以根據position的值我們就可以自行設定需要的alpha,x/y資訊,就是可以用setAlpha()、setTranslationX()或setSaleY()來自訂切換開關動畫。

Google官方提供動畫效果                                                            
public class DepthPageTransformer implements PageTransformer {    private static float MIN_SCALE = 0.75f;     @SuppressLint("NewApi")    @Override    public void transformPage(View view, float position) {        int pageWidth = view.getWidth();        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.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);         }    }}
public class ZoomOutPageTransformer implements PageTransformer {    private static float MIN_SCALE = 0.85f;     private static float MIN_ALPHA = 0.5f;     @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 <= 1) { // [-1,1]                                    // Modify the default slide transition to                                    // shrink the page as well            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));            float vertMargin = pageHeight * (1 - scaleFactor) / 2;            float horzMargin = pageWidth * (1 - scaleFactor) / 2;            if (position < 0) {                view.setTranslationX(horzMargin - vertMargin / 2);            } else {                view.setTranslationX(-horzMargin + vertMargin / 2);            }            // Scale the page down (between MIN_SCALE and 1)            view.setScaleX(scaleFactor);            view.setScaleY(scaleFactor);            // Fade the page relative to its size.            view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)                    / (1 - MIN_SCALE) * (1 - MIN_ALPHA));        } else { // (1,+Infinity]                    // This page is way off-screen to the right.            view.setAlpha(0);        }    }
使用                                                                                   
ViewPager mPager = (ViewPager) findViewById(R.id.pager);  mPager.setPageTransformer(true, new DepthPageTransformer());
我是天王蓋地虎的分割線                                                             

viewpager系列:

viewpager背景圖漸層效果:Android -- ViewPager滑動背景漸層

viewpager+fragment:Android -- ViewPager、Fragment、狀態儲存、通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.