在做引导页时,我们经常使用ViewPager+Adapter的方式实现。但是如果想在页面切换时增加一些动画,那就得利用ViewPager的setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer) 方法了。其中PageTransformer 是个接口,在实现这个接口的回调方法中有一个position参数,一直忘记它的使用方法,今天主要想对这个参数做一个说明,也算是对自己的一个总结。
/** * 透明度变换 */ public class AlphPageTransformer 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) view.setAlpha(0); } else if (position <= 0) { // [-1,0] view.setAlpha(position+1); view.setTranslationX(0); } else if (position <= 1) { // (0,1] view.setAlpha(1 - position); view.setTranslationX(pageWidth * -position); } else { // (1,+Infinity] view.setAlpha(0); } } }上面是一个透明度变化的 Transformer,从 transformPage(View view,float postition)方法中可以看出,position主要分为三个区域值 (-Infinity,-1)、[-1,1]、(1,+Infinity)
(-Infinity,-1) --- 从屏幕左侧移除的View,在屏幕上不可见。
(1,+Infinity) --- 从屏幕右侧侧移除的View,在屏幕上不可见。
[-1,1] --- 在屏幕上可见,动画效果主要是在这个范围内进行实现。
例如
(1)从View1滑动到View2的过程(即向左滑动),其中对于View1而言,其position的值是从0逐渐减小到-1。而对于View2,其position值是从1逐渐减小到0。
(2)从View2滑动到View1的过程(即向右滑动),其中对于View1而言,其position的值是从-1逐渐增大到0。而对于View2,其position的值是从0逐渐增大到1。