package com.hdl.widget.CoverFlowViewPager; import android.support.v4.view.ViewPager; import android.view.View; /** * Created by JLChen on 2019/8/22 */ public class HDLZoomPageTransformer implements ViewPager.PageTransformer { private static final float MAX_SCALE = 1.0f;//0缩放 private static final float MIN_SCALE = 0.85f;//0.85缩放 private float MIN_ALPHA = 1.0f;//最小透明度 public static final float MARGIN_MIN = 0f; public static final float MARGIN_MAX = 50f; public HDLZoomPageTransformer() { } public HDLZoomPageTransformer(float MIN_ALPHA) { this.MIN_ALPHA = MIN_ALPHA; } @Override public void transformPage(View view, float position) { //setScaleY只支持api11以上 /** * (-oo,-1) 相对于左边第一页,其左边的所有页面 ** * x、y拉伸为MIN_SCALE、透明度MIN_ALPHA */ if (position < -1) { view.setScaleX(MIN_SCALE); view.setScaleY(MIN_SCALE); view.setAlpha(MIN_ALPHA); } /** * [-1, 1 )当前页的左右第一页 */ else if (position < 1) { float scaleFactor = MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE - MIN_SCALE); //[0, 1 ) 相对于当前选中页,其右边第一页 ** if (position > 0) { view.setTranslationX(-scaleFactor); } // [-1, 0 ) 相对于当前选中页,其左边的第一页** else if (position < 0) { view.setTranslationX(scaleFactor); } view.setScaleY(scaleFactor); view.setScaleX(scaleFactor); // float alpha = 1f - Math.abs(position) * (1 - ); float alpha = MIN_ALPHA + (1 - MIN_ALPHA) * (1 - Math.abs(position)); view.setAlpha(alpha); } /** * [1,+oo) 相对于右边第一页,其右边的所有页面 * x、y拉伸为MIN_SCALE、透明度MIN_ALPHA */ else { // (1,+Infinity] view.setScaleX(MIN_SCALE); view.setScaleY(MIN_SCALE); view.setAlpha(MIN_ALPHA); } float realRotationY = Math.min(25f, Math.abs(position * 25f)); view.setRotationY(position < 0f ? realRotationY : - realRotationY); } private static float getFloat(float value,float minValue,float maxValue){ return Math.min(maxValue, Math.max(minValue, value)); } }