一,写在前面
二,属性动画的使用
![](https://i-blog.csdnimg.cn/blog_migrate/d96fc7c52fbb58dffdb15cef0e176ec9.png)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<objectAnimator
android:propertyName="scaleX"
android:duration="3000"
android:valueType="floatType"
android:valueFrom="1"
android:valueTo="0.3"
android:repeatCount="1"
android:repeatMode="reverse"
android:startOffset="1000"/>
<objectAnimator
android:propertyName="backgroundColor"
android:duration="3000"
android:valueFrom="0xFFFF0000"
android:valueTo="0xFF00FF00"
android:valueType="colorType"/>
</set>
valueType:属性的类型。有"floatType","intType","colorType"可选,分别代表浮点型,整型,颜色类型;
repeatCount:属性动画重复执行的次数;
repeatMode:属性动画重复的模式。有"reverse","restart"可选,分别表示逆向重复,连续重复。在本例中,逆向重复是指属性值从1->0.3,然后0.3->1,如果重复次数很多,依次类推;
startOffset:表示延迟多长时间后再执行动画效果,单位是ms;
2.1.2,接下里,使用AnimatorInflater加载该xml文件,并作用于Button对象,并启动动画,具体Java代码如下:
private void initAnimatorByXml() {
Button btn = (Button)findViewById(R.id.btn);
AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_set);
animatorSet.setTarget(btn);
animatorSet.start();
}
上面代码比较好理解,这里不在阐述。实现效果:1s后,在3s内使一个按钮的宽度比例从1缩写到0.3,然后重复一次动画,在3s内从0.3扩大到1;接着,按钮的背景色在3s内,由红色->绿色的变化。
注意:属性名称"scaleX","backgroundColor"是什么,为什么不可以是"abc"呢?后面会给出解释...
2.2,使用Java代码,实现属性动画
与View动画一样,属性动画既可以使用xml文件,也可以使用java代码动态的实现属性动画。直接上代码:
private void initAnimatorByJava() {
Button btn = (Button)findViewById(R.id.btn);
ValueAnimator objectAnimator = ObjectAnimator.ofFloat(btn, "scaleX", 1f, 0.3f);
objectAnimator.setDuration(3000);
objectAnimator.setRepeatCount(1);
objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
objectAnimator.start();
}
前面已经讲述过ValueAnimator是ObjectAnimator的父类,两者的区别:ValueAnimator的属性动画不需要作用于具体的对象,也没有属性名称;而ObjectAnimator的属性动画需要作用于具体的对象,有具体的属性名称,完成属性值从初始值到最终值的变化。
上述代码实现的效果:在3s内使一个按钮的宽度比例从1缩写到