先看效果图:
AdapterViewFlipper继承了AdapterViewAnimator,可以通过showPrevious()和showNext()方法控制组件显示上一个、下一个组件,可以设置切换view时候的动画,而且使用起来非常简洁。
XML属性:
android:animateFirstView:设置显示该组件的第一个View时是否使用动画
android:inAnimation:设置组件显示时使用的动画
android:loopViews:设置循环到最后一个组件后是否自动“转头”到第一个组件
android:outAnimation:设置组件隐藏时使用的动画
android:autoStart:设置显示该组件是否是自动播放
android:flipInterval:设置自动播放的时间间隔
以上属性同样也可以通过代码设置,这里就不做一一介绍了。
AdapterViewFlipper可以设置一个Adapter,去操作他的数据集合;还有一点需要注意的是AdapterViewFlipper只支持属性动画-ObjectAnimator,不可以设置别的方式的动画,不然会抛异常,如果你是写在XML里面,需要将文件放在animator下面!
animator xml:
<?xml version="1.0" encoding="utf-8"?>
<!--首页viewflipper进入动画-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<propertyValuesHolder
android:propertyName="y"
android:valueFrom="450"
android:valueTo="0"
android:valueType="floatType"/>
<propertyValuesHolder
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType"/>
</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<!--首页viewflipper退出动画-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<propertyValuesHolder
android:propertyName="y"
android:valueFrom="0"
android:valueTo="-450"
android:valueType="floatType"/>
<propertyValuesHolder
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType"/>
</objectAnimator>
这是两个同时移动和渐变的组合动画,objectAnimator设置的组合动画只能同时进行。
注意:2019-06-24更新!如下...
上述通过xml的方式设置组合动画会在android6.0以下的手机出现异常:unknown animator name: propertyvaluesholder
低版本的手机无法识别propertyvaluesholder标签?
所以保险起见就用代码设置动画:
//设置进入动画
PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationY",450,0);
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("alpha",0,1);
ObjectAnimator anim_in = ObjectAnimator.ofPropertyValuesHolder(vf_rewardNow,p1,p2).setDuration(1000);
anim_in.setInterpolator(new AccelerateDecelerateInterpolator());
adapterViewFlipper.setInAnimation(anim_in);
//设置退出动画
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationY",0,-450);
PropertyValuesHolder p4 = PropertyValuesHolder.ofFloat("alpha",1,0);
ObjectAnimator anim_out = ObjectAnimator.ofPropertyValuesHolder(vf_rewardNow,p3,p4).setDuration(1000);
anim_out.setInterpolator(new AccelerateDecelerateInterpolator());
adapterViewFlipper.setOutAnimation(anim_out);
源码我就不更新了,就是发现这个问题更新一下博客。