Android ViewPager 显示Banner图时 有时需求会要求ViewPager切换要有动画,下面讲解如何实现。
一.默认效果
1.切换类
package com.wjn.viewlistdemo.activity;
import android.annotation.SuppressLint;
import android.support.v4.view.ViewPager;
import android.view.View;
public class CubeTransformer implements ViewPager.PageTransformer {
private static float MIN_SCALE = 0.85f;
private static float MIN_ALPHA = 0.5f;
@SuppressLint("NewApi")
@Override
public void transformPage(View arg0, float arg1) {
int pageWidth = arg0.getWidth();
int pageHeight = arg0.getHeight();
if (arg1 < -1) {
arg0.setAlpha(0);
} else if (arg1 <= 1) {
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(arg1));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (arg1 < 0) {
arg0.setTranslationX(horzMargin - vertMargin / 2);
} else {
arg0.setTranslationX(-horzMargin + vertMargin / 2);
}
arg0.setScaleX(scaleFactor);
arg0.setScaleY(scaleFactor);
arg0.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else {
arg0.setAlpha(0);
}
}
}
2. 使用
viewpager.setPageTransformer(true, new CubeTransformer());
二.第三方Jar
使用jar包 nineoldandroids-2.4.0.jar
1.切换类
package com.wjn.viewlistdemo.activity;
import android.support.v4.view.ViewPager;
import android.view.View;
import com.nineoldandroids.view.ViewHelper;
public class RotateDownPageTransformer implements ViewPager.PageTransformer {
private static final float ROT_MAX = 20.0f;
private float mRot;
public void transformPage(View view, float position) {
if(position<-1){
ViewHelper.setRotation(view, 0);
}else if(position<=1){//a页滑动至b页 ; a页从 0.0 ~ -1 ;b页从1 ~ 0.0
if(position<0){
mRot=(ROT_MAX * position);
ViewHelper.setPivotX(view, view.getMeasuredWidth() * 0.5f);
ViewHelper.setPivotY(view, view.getMeasuredHeight());
ViewHelper.setRotation(view, mRot);
}else{
mRot=(ROT_MAX*position);
ViewHelper.setPivotX(view, view.getMeasuredWidth() * 0.5f);
ViewHelper.setPivotY(view, view.getMeasuredHeight());
ViewHelper.setRotation(view, mRot);
}
}else{
ViewHelper.setRotation(view, 0);
}
}
}
2.使用
viewpager.setPageTransformer(true, new RotateDownPageTransformer());
jar包下载地址:http://download.csdn.net/detail/weixin_37730482/9842531