通过属性动画ninooldandroids进行实现,ViewPager.setPageTransformer实现切换动画类
package com.fengzyz.activity.viewpage;
import java.util.ArrayList;
import java.util.List;
import com.lidroid.xutils.ViewUtils;
import com.fengzyz.test.R;
import com.fengzyz.utils.DepthPageTransformer;
import com.fengzyz.utils.RotateDownPageTransformer;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
public class PageActivity extends Activity{
private ViewPager mpageView;
private int [] mImgId = new int[]{R.drawable.guide_image1,R.drawable.guide_image2,R.drawable.guide_image3,};
private List <ImageView> mImages = new ArrayList<ImageView>();
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
ViewUtils.inject(this);
mpageView = (ViewPager)findViewById(R.id.id_viewPage);
//为pageView添加动画
mpageView.setPageTransformer(true, new RotateDownPageTransformer());
mpageView.setAdapter(new PagerAdapter() {
@Override
public Object instantiateItem(ViewGroup container,int position){
ImageView imageView = new ImageView(PageActivity.this);
imageView.setImageResource(mImgId[position]);
imageView.setScaleType(ScaleType.CENTER_CROP);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container,int position,Object object){
container.removeView(mImages.get(position));
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view ==object;
}
@Override
public int getCount() {
return mImgId.length;
}
});
}
}
自定义动画类:
package com.fengzyz.utils;
import com.nineoldandroids.view.ViewHelper;
import android.view.View;
import android.support.v4.view.ViewPager.PageTransformer;
public class RotateDownPageTransformer implements PageTransformer {
private static final float MAX_ROTATE = 20f;
private float mRot;
//A页角度变化20~0,B页角度变化0~20
@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.
ViewHelper.setRotation(view, 0);
// view.setAlpha(0);
//A页切换到B页 A页的 position0~-1 B页的position-1~0
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
mRot = position * MAX_ROTATE;
ViewHelper.setPivotX(view, pageWidth/2); //设置旋转中心
ViewHelper.setPivotY(view, view.getMeasuredHeight());
ViewHelper.setRotation(view, mRot);
} else if (position <= 1) { // (0,1]
// 20-0
mRot = position * MAX_ROTATE;
ViewHelper.setPivotX(view, pageWidth/2); //设置旋转中心
ViewHelper.setPivotY(view, view.getMeasuredHeight());
ViewHelper.setRotation(view, mRot);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
ViewHelper.setRotation(view,0);
}
}
}