package com.garea.plugin.measurer;
import java.text.DecimalFormat;
import java.util.ArrayList;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.TextView;
public class CountView extends TextView {
int duration = 2000;
float number;
public CountView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showNumberWithAnimation(float number) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "number",
0, number);
objectAnimator.setDuration(duration);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.start();
}
public CountView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CountView(Context context) {
super(context);
}
public void
setNumber(float number) {
this.number = number;
DecimalFormat fnum = new DecimalFormat("##0");
String str = fnum.format(number);
setText(str+"");
}
}
想要的效果 要个textView 设置数字100,让它减速的从0到100,而不是直接写上100,这就需要动画
Object动画
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "number", 0, 100);这行代码
的真实意思是 随着时间的变化依次产生0-100之间的数,然后去调用this的 setNumber(float number)方法。
它使用的是反射的机制 所以需要传一个 对象给他 还需要传一个方法的名称给他 这里的“number”就是方法名称
那他怎么会调用setNumber 这是他底层的给他加上的“set”+"Number"
不仅如此 View的 缩放、旋转、平移、透明度等等都是这样的
view.setScaleX(scaleX);
view.setAlpha(alpha);.
.
.
.
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "scaleX", 0, 100);
所以只要View有的setXXX的方法缩放、旋转、平移、透明度都可以这么调用。