diff --git a/viewlib/src/main/java/com/chaychan/viewlib/BigDecimalEvaluator.java b/viewlib/src/main/java/com/chaychan/viewlib/BigDecimalEvaluator.java new file mode 100644 index 0000000000000000000000000000000000000000..e600aa3a7db931cbfd92d3ca3bc0ac0e4ac23909 --- /dev/null +++ b/viewlib/src/main/java/com/chaychan/viewlib/BigDecimalEvaluator.java @@ -0,0 +1,16 @@ +package com.chaychan.viewlib; + + +import android.animation.TypeEvaluator; + +import java.math.BigDecimal; + +class BigDecimalEvaluator implements TypeEvaluator { + @Override + public Object evaluate(float fraction, Object startValue, Object endValue) { + BigDecimal start = (BigDecimal) startValue; + BigDecimal end = (BigDecimal) endValue; + BigDecimal result = end.subtract(start); + return result.multiply(new BigDecimal("" + fraction)).add(start); + } +} \ No newline at end of file diff --git a/viewlib/src/main/java/com/chaychan/viewlib/NumberRunningTextView.java b/viewlib/src/main/java/com/chaychan/viewlib/NumberRunningTextView.java index 310248b84430e8b88db0bfc3bcaddc87e94a1feb..f74ddfc6c11d7f37b6c4bff633a28b454a4ddc4d 100644 --- a/viewlib/src/main/java/com/chaychan/viewlib/NumberRunningTextView.java +++ b/viewlib/src/main/java/com/chaychan/viewlib/NumberRunningTextView.java @@ -9,6 +9,7 @@ import android.widget.TextView; import com.chaychan.viewlib.utils.StringUtils; +import java.math.BigDecimal; import java.text.DecimalFormat; /** @@ -97,19 +98,20 @@ public class NumberRunningTextView extends TextView { public void playMoneyAnim(String moneyStr) { String money = moneyStr.replace(",", "").replace("-", "");//如果传入的数字已经是使用逗号格式化过的,或者含有符号,去除逗号和负号 try { - float finalFloat = Float.parseFloat(money); + BigDecimal bigDecimal = new BigDecimal(money); + float finalFloat = bigDecimal.floatValue(); if (finalFloat < minMoney) { //如果传入的为0,则直接使用setText() setText(moneyStr); return; } - ValueAnimator floatAnimator = ValueAnimator.ofFloat(0, finalFloat); + ValueAnimator floatAnimator = ValueAnimator.ofObject(new BigDecimalEvaluator(),new BigDecimal(0), bigDecimal); floatAnimator.setDuration(duration); floatAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { - float currentNum = (float) animation.getAnimatedValue(); - String str = formatter.format(Double.parseDouble(String.valueOf(currentNum)));//格式化成两位小数 + BigDecimal currentNum = (BigDecimal) animation.getAnimatedValue(); + String str = formatter.format(Double.parseDouble(currentNum.toString()));//格式化成两位小数 // 更新显示的内容 if (useCommaFormat) { //使用每三位数字一个逗号的格式