1. 程式人生 > >Android中輪播所用到viewPager.PageTransformer 頁面滑動時候處理圖片縮放效果程式碼

Android中輪播所用到viewPager.PageTransformer 頁面滑動時候處理圖片縮放效果程式碼

class ScalePagerTransformer implements ViewPager.PageTransformer {
        //最小縮放率
        private static final float MIN_SCALE = 0.85f;
        //最小的透明度
        private static final float MIN_ALPHA = 0.5f;
        //這個就是在viewpager 頁面滑動的時候會回撥這個方法
        @Override
        public void transformPage(View view, float position) {
            //當前的圖片位置 ,viewpager設定顯示3個圖片,最左邊的為-1 中間為0  右邊位置為1
            if (position >= -1 || position <= 1) {
                //圖片高
                final float height = view.getHeight();
                //圖片寬
                final float width = view.getWidth();
                //縮放因子,    如果是中間位置0,得到因子為1,不縮放,如果為-1或者1得到縮放因子為0.85,就進行縮放
                //                                    0.85        如果為中間位置,這就是0 ,Math.abs = 0
                final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
                //            求出來圖片要進行縮放後的高度,如果為中間位置,scaleFactor =1 ,那麼這個vertMargin = 0
                //          如果是兩邊位置scaleFactor = 0.85  得到vertMargin = height*0.15/2
                final float vertMargin = height * (1 - scaleFactor) / 2;
                final float horzMargin = width * (1 - scaleFactor) / 2;
                // 這個方法就是進行縮放所指定的中心點的位置,就是圖片的中心點
                view.setPivotX(0.5f * height);
                view.setPivotY(0.5f * width);
                //這個是進行位移,應該是處理兩個圖片之間的間距
                if (position < 0) {
                    view.setTranslationX(horzMargin - vertMargin / 2);
                } else {
                    view.setTranslationX(-horzMargin + vertMargin / 2);
                }
                //進行縮放
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);
                //進行透明度處理 ,比如如果是在中間位置  0.5 + (1 - 0.85)/(1-0.85)*(1-0.5)= 0.5+0.15/0.15 * 0.5 = 0.5+0.5 = 1
                            // 如果是兩邊位置 0.5 + (0.85 - 0.85)/(1-0.85)*(1-0.5) = 0.5,進行半透明處理
                view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
            }
        }
    }