这样我们通过ViewHelper来替代我们的属性动画属性,来处理我们3.0以前版主不支持属性动画的问题,当我们运行后发现,3.0以后的版本还是没有效果,这是什么原因呢?我们打开ViewPager的源代码发现里面有一句判断:
if (Build.VERSION.SDK_INT >= 11) //Android版本判断
对这个就是罪魁祸首,当我们的版本低于3.0时,我们的动画效果代码根本得不到执行,所以如果想要解决这个问题,我们需要从写这个类。把里面setPageTransformer()里面的版本判断进行一下注释;
public void setPageTransformer(boolean reverseDrawingOrder, ViewPager.PageTransformer transformer) { //if (Build.VERSION.SDK_INT >= 11) //Android版本判断 { final boolean hasTransformer = transformer != null; final boolean needsPopulate = hasTransformer != (mPageTransformer != null); mPageTransformer = transformer; setChildrenDrawingOrderEnabledCompat(hasTransformer); if (hasTransformer) { mDrawingOrder = reverseDrawingOrder ? DRAW_ORDER_REVERSE : DRAW_ORDER_FORWARD; } else { mDrawingOrder = DRAW_ORDER_DEFAULT; } if (needsPopulate) populate(); } } |
然后我们需要把里面的布局文件进行一下更改:
<com.example.android_viewpager.ViewPagerCompate
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.example.android_viewpager.ViewPagerCompate>
然后把MainActivity进行一些更改:
mViewPager = (ViewPagerCompate) findViewById(R.id.viewPager);//修改系统提供的
这样我们刚刚修改的效果就可以在3.0以后的版本显示出来了,是不是感觉很神奇。最后我在为大家介绍一个效果:
public class RotateDownPagetransformer implements ViewPager.PageTransformer { private static final float MAX_ROTATE = 20F; private static float ROTATE = 0F; /* * 效果分析: * 滑动可以分解为:A>B * A的position:0.0 >> -1.0 * B的position:1.0 >> 0.0 * (non-Javadoc) * @see android.support.v4.view.ViewPager.PageTransformer# * transformPage(android.view.View, float) */ @Override public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // [-Infinity,-1) ViewHelper.setAlpha(view, 0);//设置透明度 } else if (position <= 0) { // A页position:0.0 >> 1.0 //计算旋转角度 ROTATE = MAX_ROTATE * position; //设置旋转中心 ViewHelper.setPivotX(view, pageWidth/2); ViewHelper.setPivotY(view, view.getMeasuredHeight()); //设置选择角度 ViewHelper.setRotation(view, ROTATE); } else if (position <= 1) { // B页position:1.0 >> 0.0 //计算旋转角度 ROTATE = MAX_ROTATE * position; //设置旋转中心 ViewHelper.setPivotX(view, pageWidth/2); ViewHelper.setPivotY(view, view.getMeasuredHeight()); //设置选择角度 ViewHelper.setRotation(view, ROTATE); } else { // (1,+Infinity] ViewHelper.setAlpha(view, 0); } } } |
这是一个类似于扇形的切换效果,好了对于ViewPager的切换动画就已经为大家介绍完毕,内容较多,大家有什么疑问可以留言交流。