首页 > 代码库 > Android–ViewPager切换动画,PageTransformer

Android–ViewPager切换动画,PageTransformer

transformPage(View view, float position)                                         

view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时,position是0,如果前一页和下一页基本各在屏幕占一半时,前一页的position是-0.5,后一页的posiotn是0.5(是-0.5还是0.5要看当前的view是前面那一页的view还是后面那一页的),所以根据position的值我们就可以自行设置需要的alpha,x/y信息,就是可以用setAlpha()、setTranslationX()或setSaleY()来自定义切换动画。

Google官方提供动画效果                                                            

public class DepthPageTransformer implements PageTransformer {    private static float MIN_SCALE = 0.75f;     @SuppressLint("NewApi")    @Override    public void transformPage(View view, float position) {        int pageWidth = view.getWidth();        if (position < -1) { // [-Infinity,-1)                                // This page is way off-screen to the left.            view.setAlpha(0);        } else if (position <= 0) { // [-1,0]                                    // Use the default slide transition when                                    // moving to the left page            view.setAlpha(1);            view.setTranslationX(0);            view.setScaleX(1);            view.setScaleY(1);        } else if (position <= 1) { // (0,1]                                    // Fade the page out.            view.setAlpha(1 - position);            // Counteract the default slide transition            view.setTranslationX(pageWidth * -position);            // Scale the page down (between MIN_SCALE and 1)            float scaleFactor = MIN_SCALE + (1 - MIN_SCALE)                    * (1 - Math.abs(position));            view.setScaleX(scaleFactor);            view.setScaleY(scaleFactor);        } else { // (1,+Infinity]                    // This page is way off-screen to the right.            view.setAlpha(0);         }    }}
public class ZoomOutPageTransformer implements PageTransformer {    private static float MIN_SCALE = 0.85f;     private static float MIN_ALPHA = 0.5f;     @Override    public void transformPage(View view, float position) {        int pageWidth = view.getWidth();        int pageHeight = view.getHeight();         if (position < -1) { // [-Infinity,-1)                                // This page is way off-screen to the left.            view.setAlpha(0);        } else if (position <= 1) { // [-1,1]                                    // Modify the default slide transition to                                    // shrink the page as well            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));            float vertMargin = pageHeight * (1 - scaleFactor) / 2;            float horzMargin = pageWidth * (1 - scaleFactor) / 2;            if (position < 0) {                view.setTranslationX(horzMargin - vertMargin / 2);            } else {                view.setTranslationX(-horzMargin + vertMargin / 2);            }            // Scale the page down (between MIN_SCALE and 1)            view.setScaleX(scaleFactor);            view.setScaleY(scaleFactor);            // Fade the page relative to its size.            view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)                    / (1 - MIN_SCALE) * (1 - MIN_ALPHA));        } else { // (1,+Infinity]                    // This page is way off-screen to the right.            view.setAlpha(0);        }    }

使用                                                                                   

ViewPager mPager = (ViewPager) findViewById(R.id.pager);  mPager.setPageTransformer(true, new DepthPageTransformer());

我是天王盖地虎的分割线                                                             

viewpager系列:

viewpager背景图渐变效果:Android -- ViewPager滑动背景渐变

viewpager+fragment:Android -- ViewPager、Fragment、状态保存、通信

Android–ViewPager切换动画,PageTransformer