package com.example.test; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; /** * Created by mengjianbo on 2018-08-07. */ public class TransFormer implements ViewPager.PageTransformer { public static float MIN_ALPHA = 0.5f; //最小透明度 public static float MIN_SCALE = 0.7f; //最缩放度 public static float SPACE = 20; //view间距 填补因缩放造成的巨大间距 /** * * @param page * @param position * -1左边view 0中间view 1右边view * 但每次滑动只涉及两个view,分别调用此函数,实现view的实时变化 */ @Override public void transformPage(View page, float position) { if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. // page.setAlpha(MIN_ALPHA); page.setScaleX(MIN_SCALE); page.setScaleY(MIN_SCALE); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page // page.setAlpha(1); // page.setTranslationX(0); float scaleFactor = 1 +position*(1-MIN_SCALE); //1-position*0.3f page.setScaleX(scaleFactor); page.setScaleY(scaleFactor); page.setTranslationX(SPACE * Math.abs(position)); // page.setTranslationX(SPACE * -position); 等同效果 左移view(X变小) +space减小缩放造成的距离扩大 } else if (position <= 1) { // (0,1] // Fade the page out. // page.setAlpha(1 - position*MIN_ALPHA); // Counteract the default slide transition // page.setTranslationX(pageWidth * -position); // Scale the page down (between MIN_SCALE and 1) float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); //0.7+(1-position)*0.3f 绝对值position 正 page.setScaleX(scaleFactor); page.setScaleY(scaleFactor); page.setTranslationX(-SPACE * Math.abs(position)); // page.setTranslationX(SPACE * -position); 等同效果 右移view(X变大) -space减小缩放造成的距离扩大 } else { // (1,+Infinity] 可与上面 <-1 合并 // This page is way off-screen to the right. // page.setAlpha(MIN_ALPHA); page.setScaleX(MIN_SCALE); page.setScaleY(MIN_SCALE); } } }
PageTransformer实现ViewPager 页面切换
猜你喜欢
转载自blog.csdn.net/dawan19909/article/details/81484352
今日推荐
周排行