android千变万化的ViewPager之三

最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述android千变万化的ViewPager之三相关的知识,希望能为你提供帮助。
前面我们学习了怎么了ViewPager添加动画效果,今天我来说下怎么自定义动画效果
首先我们理解系统给我们的那两个类。我这里贴上去一个

1 public class ZoomOutPageTransformer implements PageTransformer { 2private static final float MIN_SCALE = 0.85f; 3private static final float MIN_ALPHA = 0.5f; 4 5public void transformPage(View view, float position) { 6int pageWidth = view.getWidth(); 7int pageHeight = view.getHeight(); 8 9if (position < -1) { // [-Infinity,-1) 10// This page is way off-screen to the left. 11view.setAlpha(0); 12 13} else if (position < = 1) { // [-1,1] 14// Modify the default slide transition to shrink the page as well 15float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 16float vertMargin = pageHeight * (1 - scaleFactor) / 2; 17float horzMargin = pageWidth * (1 - scaleFactor) / 2; 18if (position < 0) { 19view.setTranslationX(horzMargin - vertMargin / 2); 20} else { 21view.setTranslationX(-horzMargin + vertMargin / 2); 22} 23 24// Scale the page down (between MIN_SCALE and 1) 25view.setScaleX(scaleFactor); 26view.setScaleY(scaleFactor); 27 28// Fade the page relative to its size. 29view.setAlpha(MIN_ALPHA + 30(scaleFactor - MIN_SCALE) / 31(1 - MIN_SCALE) * (1 - MIN_ALPHA)); 32 33} else { // (1,+Infinity] 34// This page is way off-screen to the right. 35view.setAlpha(0); 36} 37} 38 39 }

我们会发现transformPage方法中有两个参数view和position。我来解释下这两个参数的意思:view表示的是当前操作的view(view在出去的view和进来的view不断切换),position表示的是当前的view的位置。首先说下不同的view有不同position,出去的view的position位于[-1,0]之间,进来的view的position位于[0,1]之间。其它的view分别位于[-Infinity,-1)和(1,+Infinity],这些的view都是不可见的。
我们通过position的不同范围,可以判断当前的操作的是哪个view明白了这一点,对于我们自定义不同的动画效果有很大的帮助。
改写的基本思想:在源代码的基础上,写自己的喜欢的动画。
代码
1 package com.example.android_viewpager; 2 3 import android.support.v4.view.ViewPager.PageTransformer; 4 import android.view.View; 5 6 public class MyTransformer implements PageTransformer{ 7public void transformPage(View view, float position) { 8float angle = 30; 9if (position < -1) { // [-Infinity,-1) 10// This page is way off-screen to the left. 11view.setAlpha(0); 12 13} else if (position < = 1) { // [-1,1] 14if (position < 0) //操作的是出去view 15{ 16angle *= position; 17//这两个是设置旋转中心 18view.setPivotX(view.getWidth() / 2); 19view.setPivotY(view.getMeasuredHeight()); //view的底部 20view.setRotation(angle); 21angle = 50; 22} else //操作的进来的view 23{ 24angle *= position; 25view.setPivotX(view.getWidth() / 2); 26view.setPivotY(view.getMeasuredHeight()); //view的底部 27view.setRotation(angle); 28angle = 50; 29} 30 31} else { // (1,+Infinity] 32// This page is way off-screen to the right. 33view.setAlpha(0); 34} 35} 36 37 38 }

【android千变万化的ViewPager之三】 

    推荐阅读