来源于网络这里写链接内容
属性动画的属性:
Duration:动画的持续时间
TimeInterpolation: 用于定义动画变化率的接口,所有插值器都必须实现此接口,如线性,非线性插值器。
TypeEvaluator: 用于定义属性值计算方式的接口,有int,float,color类型,根据属性的起始、结束值和插值一起计算出当前时间的属性值
Animation sets: 动画集合,即可以同时对一个对象应用多个动画,这些动画可以同时播放也可以对不同动画设置不同的延迟
Frame refreash delay: 多少时间刷新一次,即每隔多少时间计算一次属性值,默认为10ms,最终刷新时间还受系统进程调度与硬件的影响
Repeat Country and behavoir:重复次数与方式,如播放3次、5次、无限循环,可以让此动画一直重复,或播放完时向反向播放
import com.nineoldandroids.animation.ValueAnimator;
public class ValueAnimatorActivity extends Activity implements View.OnClickListener{
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_value_animator);
mButton = (Button) findViewById(R.id.btn1);
mButton.setOnClickListener(this);
}
private void performAnimate(final View target, final int start, final int end) {
ValueAnimator valueAnimator = ValueAnimator.ofInt(1,100);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
private com.nineoldandroids.animation.IntEvaluator intEvaluator = new com.nineoldandroids.animation.IntEvaluator();
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
//获得当前动画的进度值,整型,1-100
int currentValue = (Integer) valueAnimator.getAnimatedValue();
//计算当前进度占整个动画的比例,浮点型0-1;
float fraction = currentValue / 100f;
//直接调用整型估值器通过比例计算出宽度,然后设置给Button
target.getLayoutParams().width = intEvaluator.evaluate(fraction,start,end);
target.requestLayout();
}
});
valueAnimator.setDuration(5000).start();
}
@Override
public void onClick(View v) {
if(v==mButton){
performAnimate(mButton, mButton.getWidth(), 500);
}
}
}