安卓仿余额宝的资产数字跳动的动画效果

安卓仿余额宝的资产数字跳动的动画效果

视频转gif有点失真,效果就是这个效果

因为是金融类的app,需求是想要实现总资产数字跳动的动画展示效果,这个需求本身没有什么难度,无非是使用属性动画来实现(优化前):
ValueAnimator animator = ValueAnimator.ofInt(mStartValue, mEndValue);
                animator.setDuration(duration);
                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        mTextView.setText(animation.getAnimatedValue().toString());
                    }
                });
                animator.start();

即通过ValueAnimator.ofInt()或者ofFloat()来实现从mStartValue到mEndValue的数字自增长动画,但是会有一个问题,就是当资产超过int或者float的范围后,展示的数字就会有问题,所以必须进行自定义,如下:

自定义的实现效果(优化后)
private void initRiseNumber(final TextView textView, final String total) {
        mAnimator = ValueAnimator.ofObject(new DoubleTypeEvaluator(), 0.00, new BigDecimal(total).doubleValue());
        mAnimator.setDuration(1500);
        mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                String number = String.valueOf(animation.getAnimatedValue());
                DecimalFormat df = new DecimalFormat(",##0.00");
                textView.setText(df.format(new BigDecimal(number)));
            }
        });
        mAnimator.start();
    }
    
    /**
     * 自定义的TypeEvaluator
     */
    class DoubleTypeEvaluator implements TypeEvaluator<Double> {
        @Override
        public Double evaluate(float fraction, Double startValue, Double endValue) {
            return startValue + fraction * (endValue - startValue);
        }
    }

通过DoubleTypeEvaluator()通过自定义double类型的TypeEvaluator,因双精度的数值范围更大,所以不会出现文章开始的精度问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值