From 850b5b3f8dc5222361a28ccbed0041b41ad947a7 Mon Sep 17 00:00:00 2001 From: chaychan <844738237@qq.com> Date: Mon, 29 Jan 2018 16:19:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=91=E9=A2=9D=E7=B2=BE?= =?UTF-8?q?=E5=BA=A6=E5=8F=98=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chaychan/viewlib/BigDecimalEvaluator.java | 16 ++++++++++++++++ .../chaychan/viewlib/NumberRunningTextView.java | 10 ++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 viewlib/src/main/java/com/chaychan/viewlib/BigDecimalEvaluator.java 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 0000000..e600aa3 --- /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 310248b..f74ddfc 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) { //使用每三位数字一个逗号的格式 -- GitLab