Android中轮播所用到viewPager.PageTransformer 页面滑动时候处理图片缩放效果代码

来源:互联网 发布:日本对外贸易数据2015 编辑:程序博客网 时间:2024/06/05 23:08
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));
            }
        }
    }
阅读全文
0 0