Android-----ViewPager的PageTransformer

效果

 

 

实现

具体实现就是设置viewpager的setPageTransformer方法,

自定义一个MyPageTransformer实现PageTransformer接口,复写接口中transformPage方法. 主要是根据position来做不同的操作 

public class MyPageTransformer implements ViewPager.PageTransformer {
  @Override
  public void transformPage(View view, float position) {     // 根据view获取每个page的宽高     int pageWidth = view.getWidth();     int pageHeight = view.getHeight();     // 判断当前page的position     if (position < -1) {       // 当下标小于-a,此时page已经看不到了,透明度为0       view.setAlpha(0);     } else if (position <= 1) {       // 当下标在[-a,a]区间       // 修改默认的滑动缩放       // 计算缩放比例 取(a - 当前下标的绝对值) 和 设置的比例的最大值,position最小为-a 最大为1       float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));       // 根据比例计算横向和纵向的缩放结果, 根据scaleFactor计算出范围 [0,pageSize]       float vertMargin = pageHeight * (1 - scaleFactor) / 2;       float horzMargin = pageWidth * (1 - scaleFactor) / 2;       
  
      if (position < 0) {         // 当position处于[-a,0) 此时当前页面向左滑动的X轴平移距离         view.setTranslationX(horzMargin - vertMargin / 2);       } else {         // 当position处于[0, a] 此时当前页面向右滑动的X轴的平移距离         view.setTranslationX(-horzMargin + vertMargin / 2);       }       
  
      // 设置page的缩放       view.setScaleX(scaleFactor);       view.setScaleY(scaleFactor);       // 设置page的透明度变化       view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));    } else { // (a,+Infinity]       // 页面离开屏幕 不可见 设置透明度为0       view.setAlpha(0);    }   } }

 

 

Position

  这个方法里面的position并不是指ViewPager的页面的下标,而是当前页面所处位置的下标,区间是[-1,1] 
  当前页面可见时,position为0, 
  当手指向左滑动,position取值范围为[-1,0) 
  当手指向右滑动,position取值范围为(0,-1] 
  当我输出这个position的值时,发现会出现两次,推测当page可见的时候,就会计算这个值,所以当page处于滑动中,即屏幕上有两个页面同时存在时,两个page都会调用这个方法 
  title

posted @ 2018-04-01 14:17  予有荣焉  阅读(761)  评论(0)    收藏  举报