public class CountUpTextView extends android.support.v7.widget.AppCompatTextView {
private static int DURATION = 1000;
//金币
private int intNumber = 0;
private float floatNumber = 0;
//现金
private float moneyNumber = 0.0f;
public CountUpTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setNumberText(int newNumber) {
if (newNumber > intNumber) {//当新数字大于旧数字则调用动画,否则直接展示
runWithIntAnimation(intNumber, newNumber);
} else {
setText(newNumber + "");
}
this.intNumber = newNumber;
}
public void setNumberText(float newNumber, int dot) {
if (newNumber > floatNumber) {
runWithFloatAnimation(floatNumber, newNumber, dot);
} else {
if ((int)newNumber - newNumber == 0) {
setText((int)newNumber + "");
} else {
setText(String.format(Locale.getDefault(), "%." + dot + "f", newNumber));
}
}
this.floatNumber = newNumber;
}
public void setNumber(int newNumber) {
this.intNumber = newNumber;
this.floatNumber = (float)newNumber;
}
public void setNumber(float newNumber) {
this.intNumber = (int)newNumber;
this.floatNumber = newNumber;
}
public void resetNumber() {
intNumber = 0;
floatNumber = 0;
moneyNumber = 0.0f;
}
/**
* 整数显示
*
* @param oldNumber
* @param newNumber
*/
public void runWithIntAnimation(int oldNumber, int newNumber) {
ValueAnimator valueAnimator = ValueAnimator.ofInt(oldNumber, newNumber);
valueAnimator.setDuration(DURATION);
valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
setText(valueAnimator.getAnimatedValue().toString());
}
});
valueAnimator.start();
}
/**
* 浮点显示
*
* @param oldNumber
* @param newNumber
*/
public void runWithFloatAnimation(float oldNumber, float newNumber, final int dot) {//参数分别为:旧数字,新数字,小数后几位
ValueAnimator valueAnimator = ValueAnimator.ofFloat(oldNumber, newNumber);
valueAnimator.setDuration(DURATION);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float number = (float)valueAnimator.getAnimatedValue();
if ((int)number - number == 0) {
setText((int)number + "");
} else {
setText(String.format(Locale.getDefault(), "%." + dot + "f", valueAnimator.getAnimatedValue()));
}
}
});
valueAnimator.start();
}
}
Android 数字滚动的效果
最新推荐文章于 2024-08-12 04:06:28 发布