博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-----ViewPager的PageTransformer
阅读量:4960 次
发布时间:2019-06-12

本文共 1711 字,大约阅读时间需要 5 分钟。

效果

 

 

实现

具体实现就是设置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

转载于:https://www.cnblogs.com/sweep/p/8686489.html

你可能感兴趣的文章
React + Redux 入门(一):抛开 React 学 Redux
查看>>
13位时间戳和时间格式化转换,工具类
查看>>
vue router-link子级返回父级页面
查看>>
C# 通知机制 IObserver<T> 和 IObservable<T>
查看>>
Code of Conduct by jsFoundation
查看>>
div 只显示两行超出部分隐藏
查看>>
C#小练习ⅲ
查看>>
电源防反接保护电路
查看>>
arraylist
查看>>
zoj 1649 Rescue (BFS)(转载)
查看>>
2124: 等差子序列 - BZOJ
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
客户数据库出现大量cache buffer chains latch
查看>>
機械の総合病院 [MISSION LEVEL: C]
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>