1. 使用方法
ObjectAnimator.ofFloat(image, "translationX", 0,100).setDuration(2000).start();
第一个参数是组件,第二个参数是动画操作方式,有以下几种:
- 平移 translationX,translationY,X,Y
- 旋转 rotation,rotationX,rotationY
- 透明度 alpha
- 缩放 scaleX,scaleY
也可这样写
ObjectAnimator animation = ObjectAnimator.ofFloat(image, "rotationY", 0,360).setDuration(500);
animation.setRepeatCount(4);
animation.start();
2. 多个属性动画组合(3种方式)
(1) 多次写动画操作,如下
ObjectAnimator.ofFloat(image, "translationX", 0,100).setDuration(2000).start();
ObjectAnimator.ofFloat(image, "translationY", 0,100).setDuration(2000).start();
(2) 使用PropertyValuesHolder
PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("translationX", 0,100);
PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("scaleX", 0,1);
PropertyValuesHolder holder3 = PropertyValuesHolder.ofFloat("scaleY", 0,1);
ObjectAnimator.ofPropertyValuesHolder(image, holder1,holder2,holder3).setDuration(2000).start();
(3) 使用AnimatorSet(补间动画里面也有set这种方式)
ObjectAnimator animator1 = ObjectAnimator.ofFloat(image, "translationX", 0,100);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(image, "alpha", 0,1);
AnimatorSet animatorSet = new AnimatorSet();
/********按顺序播放*****/
//animatorSet.playSequentially(animator1,animator2);
/********同时播放*****/
//animatorSet.play(animator1).with(animator2);
/********按顺序播放*****/
animatorSet.play(animator2).after(animator1);
animatorSet.setDuration(2000);
animatorSet.start();
3. 属性动画监听
ObjectAnimator animator = ObjectAnimator.ofFloat(image, "translationX", 0,100);
animator.setDuration(2000);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// TODO Auto-generated method stub
super.onAnimationEnd(animation);
Toast.makeText(MainActivity3.this, "动画完毕", Toast.LENGTH_SHORT).show();
}
});
animator.start();
addListener函数中传入的也可为,这种方式里面重写的方法太多。
animator.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animator animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animator animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationCancel(Animator animation) {
// TODO Auto-generated method stub
}
});
4. 属性动画的ValueAnimator
ValueAnimator是属性动画的数值发生器,它是ObjectAnimator的父类。从名字可以看出来,它的功能主要是为动画生成动画参数,不参与显示动画。一个例子可以看出来。
ValueAnimator animator = ValueAnimator.ofInt(0,100);
animator.setDuration(5000);
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// TODO Auto-generated method stub
Integer num = (Integer) animation.getAnimatedValue();
btn.setText(""+num);
}
});
animator.start();
在onAnimationUpdate方法中,可以得到实时变化的数值。这里让button上的文字在5秒内从0变化到100。
可以利用ValueAnimator设置自定义的动画参数。 如下使用的是ofObject方法。
ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator() {
@Override
public PointF evaluate(float fraction, PointF startValue,
PointF endValue) {
float x=(endValue.x-startValue.x)*fraction;
float y=(endValue.y-startValue.x)*fraction;
btn.setX(x);
btn.setY(y);
return null;
}
}, new PointF(1, 1),new PointF(300,300));
animator.setDuration(5000);
animator.start();