属性动画就是用来替代View的视图动画的,可以改变View的属性,从而不会出现像视图动画一样只能点击原来的位置。
ObjectAnimator
属性动画中最重要的类,通过此类进行动画的控制。
通过静态工厂类返回一个ObjectAnimator
参数说明:第一个参数是要操作的View,第二个是要操作的属性(横向平移或者纵向平移、旋转、渐变等),第三个是可变的float数组,用于该属性的变化取值范围。
CustomView customView = findViewById(R.id.customView);
ObjectAnimator animator = ObjectAnimator.ofFloat(customView, "alpha", 1.0f, 0.0f).setDuration(5000);
animator.setRepeatCount(3);//设置动画变化次数
animator.start();
详细属性介绍:
translationX和 translationY:用来沿着X轴或者Y轴进行平移。
rotation、rotationX、rotationY:用来围绕View的支点进行旋转。
alpha:透明度,默认是1(不透明),0代表完全透明。
注:在使用某属性的时候,需要有get和set方法,如果没有,该动画则无法生效,如果没有,可以自定义一个。
动画的监听
完整动画具有start、Repeat、End、Cancel四个过程,
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
更多的时候我们只需要需要使用End。则可以
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
组合动画
AnimatorSet
AnimatorSet提供了play()方法,将ObjectAnimator对象作为参数继续传递。
//串行
set.playSequentially(animator1, animator2);
还可以通过after()、before()方法实现。
//并行
set.playTogether(animator2,animator3);
并行还可以通过with()完成
PropertyValuesHolder
只能是多个动画一起执行,不能串行执行
XML中使用属性动画
…