属性动画
介绍
属性动画本质就是动态改变View的属性。
PS:属性动画不仅可以改变View的属性。只要是一个对象的属性,有set/get方法,就可以动态的去变化。
ObjectAnimator
ObjectAnimator类是将属性动画操作简化的一个类。
最常见用法:
//将view的tranlationX属性,在2000ms从0变化到100
ObjectAnimator.ofFloat(view,"translationX",0,100)
.setDuration(2000)
.start();
ObjectAnimator方法有ofInt、ofFloat、ofObject等方法,传入一个Object对象,一个对象的属性,数值变化范围(如0-100-1000),就会主动调用Object的Set方法不断去设置属性。设置之后调用更新方法(如View的重绘方法等)
XML:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="translationX"
android:valueFrom="0"
android:valueTo="100"
android:valueType="floatType">
</objectAnimator>
JAVA引用XML文件方法
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.tranlation_animator);
animator.setTarget(view);
animator.start();
AnimatorSet
动画集,关联多个Animator动画。
//以下动画播放顺序,1->(2,3)->4
AnimatorSet set = new AnimatorSet();
set.play(2).with(3).before(1).after(4);
//动画5在1000ms后播放。
set.play(5).after(1000);
set.setDuration(2000);
set.start();
ValueAnimator(重点)
ValueAnimator是ObjectAnimator的父类,它相当于只提供了一个数据变化的功能。需要自己去实现数据变化时,具体要执行的操作。大多数时候,我们自定义一些特殊的动画的时候,都是使用ValueAnimator类。
常见用法
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float)animation.getAnimatedValue();
//数值更新时进行的操作。
}
});
animator.setDuration(2000);
动画监听
以上几种类型的动画都支持设置此监听
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//动画开始监听
}
@Override
public void onAnimationEnd(Animator animation) {
//动画结束监听
}
@Override
public void onAnimationCancel(Animator animation) {
//动画取消监听
}
@Override
public void onAnimationRepeat(Animator animation) {
//动画重复播放监听
}
});