package com.bigfat.viewpageranim; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; import com.nineoldandroids.view.ViewHelper; import java.util.HashMap; import java.util.Map; /** * @author <a href="mailto:fbzhh007@gmail.com">bigfat</a> * @since 2015/2/13 */ public class ViewPagerWithTransformerAnim extends ViewPager { private View mLeft; private View mRight; private float mTrans; private float mScale; private float mAlpha; private static final float MIN_SCALE = 0.7f; private static final float MIN_ALPHA = 0.5f; private Map<Integer, View> mChildren = new HashMap<>(); public ViewPagerWithTransformerAnim(Context context) { this(context, null); } public ViewPagerWithTransformerAnim(Context context, AttributeSet attrs) { super(context, attrs); } public void setViewForPosition(View view, Integer position) { mChildren.put(position, view); } public void removeViewFromPosition(Integer position) { mChildren.remove(position); } @Override protected void onPageScrolled(int position, float offset, int offsetPixels) { // Log.i("TAG", "position--->" + position + "\toffset--->" + offset + "\toffsetPixels--->" + offsetPixels); // Log.i("TAG", "getCurrentItem--->" + getCurrentItem()); mLeft = mChildren.get(position); mRight = mChildren.get(position + 1); animStack(mLeft, mRight, offset, offsetPixels); super.onPageScrolled(position, offset, offsetPixels); } /** * 设置左右Page动画 * * @param left 左边View * @param right 右边View * @param offset 偏移百分比(0~1) * @param offsetPixels 偏移像素值 */ private void animStack(View left, View right, float offset, int offsetPixels) { if (right != null) { mTrans = -getWidth() - getPageMargin() + offsetPixels; mScale = MIN_SCALE + (1 - MIN_SCALE) * offset; mAlpha = MIN_ALPHA + (1 - MIN_ALPHA) * offset; ViewHelper.setTranslationX(right, mTrans); ViewHelper.setScaleX(right, mScale); ViewHelper.setScaleY(right, mScale); ViewHelper.setAlpha(right, mAlpha); } //左边在上方 if (left != null) { left.bringToFront(); } // //设置左边View动画 // ViewHelper.setPivotX(mLeft, mLeft.getWidth() / 2); // ViewHelper.setPivotY(mLeft, mLeft.getMeasuredHeight()); // ViewHelper.setRotation(mLeft, -20 * (1 - offset)); // //设置右边View动画 // ViewHelper.setPivotX(mRight, mRight.getWidth() / 2); // ViewHelper.setPivotY(mRight, mRight.getMeasuredHeight()); // ViewHelper.setRotation(mRight, 20 * offset); } }