仿京东金融小数点动画之Android 保留两位小数的坑

本文介绍如何使用ValueAnimator实现京东金融小数点过渡动画,并解决保留过多小数位的问题。通过尝试DecimalFormat、BigDecimal等方法,最终采用Math类成功保留两位小数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

成功保留两位截图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值