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