ValueAnimator
valueAnimator是整个属性动画机制当中最核心的一个类。
简单使用
ValueAnimator anim = ValueAnimator.ofFloat(0f,1f);
anim.setDuration(1000);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float current = (float) animation.getAnimatedValue();
Log.e(“TAG”,current+”“);
}
});
anim.start();
从0 变成1的过程
valueAnimator最常用的方法就是ofFloat()、ofInt()、等还有ofObject();
此外,还可以调用setStartDelay()方法来设置动画延迟播放的时间
调用setRepeatCount()和setRepeatMode()方法设置动画循环播放次数和循环播放模式,
循环模式包括RESTART和REVERSE两种,分别表示重新播放个倒叙播放的意思。
ObjectAnimator
objectAbunator可以对任意对象的任意属性就行动画操作。
例如:把一个imgeView从常规变成透明
ObjectAnimator animator = ObjectAnimator.ofFloat(img,”alpha”,1.0f,0.0f);
animator.setDuration(1000);
animator.start();
同理rotate translate scale 同样效果
组合动画
实现组合动画主要借助AnimatorSet这个类,提供了一个play()方法,如果向这个方法中传入一个Animator对象将会返回一个AnimatorSet.Builder的实例,Animatorset.Builder包括下面四个方法:
1.after(Animator anim)将现有动画插入到传入的动画之后执行
2.after(long delay) 将现有动画延迟指定毫秒后执行
3.before(Animator anim) 将现有动画插入到传入的动画之前执行
4.with(Animator anim) 将现有动画和传入的动画同时执行
ObjectAnimator moveIn = ObjectAnimator.ofFloat(img,"translationX",-500f,0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(img,"rotate",0f,360f);
ObjectAnimator fadeInout = ObjectAnimator.ofFloat(img,"alpha",1f,0f,1f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(rotate).with(fadeInout).after(moveIn);
animatorSet.setDuration(2000);
animatorSet.start();
Animator监听器
Animator提供了一个addListener()方法,这个方法接受一个AnimatorListener,只需要实现这个AnimatorListener就可以监听。
animatorSet.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) {
}
});
使用xml编写属性动画
首先在res目录下创建animtor文件夹,所有属性动画的文件都放在xml下
在xml文化中我们一共可使用以下三个标签:
animator
objectAnimator
set
例1:实现一个从0-100的过度