android 数字递增动画,Android金额递增动画之长数据精度丢失问题

一、背景

一个金额变动的动画的需求

二、开发

其实这个动画相当简单,下面看下网上大部人做法:

6adff305de5c

没错,就是利用ValueAnimator.ofFloat或者setFloatValues这两个方法,设置起始和结束的值,然后在监听器里获取渐变值animatedValue,

给TextView不断的setText即可;这个动画过程,FrameWork层已经帮你处理好了,只要知道原理即可,我们来看下ofFloat做了什么:

6adff305de5c

用endValue值减去startValue值,算出它们之间的差值,然后乘以fraction这个系数,再加上startValue值,那么就得到当前动画的值了

下面给大家推荐这篇文章分析的很全面了:

一切都是这么顺利,不是吗! 然而问题来了:

6adff305de5c

后台取到这一串金额数据以上方法满足吗?

上面数据有9位,java中float类型能保证的数据精度完整的就只有6-7位,那么问题就来了,最终展示出来的数据竟然少了几块钱,测试同学不给过咋办?

获取后台数据,经过gson转化后,使用BigDecimal赋值,没问题,然后用BigDecimal.floatvalue()取值后,发现问题来了,数值不对啊!

知道float数据问题后,当然就想换成double类型咯,然而~~~,ValueAnimator.ofDouble() 根本没有?,咋办?

没关系,ValueAnimator还提供了一个ofObject()方法,自然是扩展的方法,其中有一个TypeEvaluator参数,一个接口,实现之。

6adff305de5c

这个就是我们依葫芦画瓢写出的Double方式

是不是很简单,O(∩_∩)O哈哈~

6adff305de5c

使用方法

最终调试,问题解决~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值