1.首先先实现动画吧,用ValueAnimator实现这个京东金融小数点过度动画
先贴代码:
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedValue = (float) valueAnimator.getAnimatedValue();
textview.setText("$" + animatedValue);
}
});
valueAnimator.setDuration(6000);
valueAnimator.start();
上面代码虽然能实现动画,但是保留小数位有点多,如下图:
截图中有五位小数点
开始踩坑:
使用DecimalFormat 类
DecimalFormat decimalFormat = new DecimalFormat("#.00");
String formatStr = decimalFormat.format(valueAnimator);
最低API 需要 Lever 24
剩余几种都是API不兼容:
使用BigDecimal类
BigDecimal bigDecima = new BigDecimal(valueAnimator);
double v = bigDecima.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
使用NumberFormat类
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
String format = nf.format(valueAnimator);
最后使用Math类成功:
float animatedValueFloat = (float) (Math.round(animatedValue * 100) / 100.0);
成功保留两位截图: