point1:属性动画能真实的改变了一个View的属性。
point2:ObjectAnimator是通过静态工厂类返回一个对象,参数包含一个View对象和它的属性名字,这个鼠标必须有get set函数
point3:针对一个对象的多个属性,要多个动画效果,使用PropertyValuesHolder来实现,AnimatorSet可以控制多个View多个动画的显示时间和效果
例1:设置一个TextView向右移动200px
ObjectAnimator animator = ObjectAnimator.ofFloat(firstTv,
"translationX",
200);
animator.setDuration(1000);
animator.start();
例2:设置一个对象的多个属性
PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationX", 100);
PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX", 0.5f, 0f, 0.3f, 1f);
PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("scaleY", 0.5f, 0f, 1f);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(myBn, pvh1, pvh2, pvh3);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
myBn.setText("over");
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
Float value = (Float) valueAnimator.getAnimatedValue();
myBn.setText(value+"");
}
});
objectAnimator.setDuration(3000).start();
例3:设置多个对象的多个属性
ObjectAnimator animator1 = ObjectAnimator.ofFloat(sBn,"translationX",300f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(sBn,"scaleX",1f,0f,1f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(sBn,"scaleY",0.5f,0f,1f);
AnimatorSet set = new AnimatorSet();
set.setDuration(2000);
ObjectAnimator animator = ObjectAnimator.ofFloat(firstTv,
"translationX",
200);
set.play(animator).before(animator1);
set.play(animator1).before(animator2);
set.play(animator2).with(animator3);
set.start();
例4:简写,使用animate方法直接设置View动画
animateBn.animate().alpha(0).y(300).setDuration(1000).withEndAction(new Runnable() {
@Override
public void run() {
animateBn.setText("over");
}
});