ViewPager的几种动画效果源代码

来源:互联网 发布:windows资源管理器 编辑:程序博客网 时间:2024/06/14 05:47
//1.浮出效果:public class DepthPageTransformer implements ViewPager.PageTransformer {    private static final float MIN_SCALE = 0.75f;    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);        }    }}//2.闪移效果:
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {    private static final float MIN_SCALE = 0.85f;    private static final float MIN_ALPHA = 0.5f;    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);        }    }}


//3.旋转效果
 public class RotatePageTransformer implements ViewPager.PageTransformer {        private static final float MIN_SCALE = 0.75f;        @Override        public void transformPage(View page, float position) {            if (position < -1 || position > 1) {                page.setAlpha(0);            } else {                page.setRotation(360 * position);                // Fade the page out.                page.setAlpha(1 - Math.abs(position));                float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));                page.setScaleX(scaleFactor);                page.setScaleY(scaleFactor);            }        }    }


0 0