数字跳动自增特效

前言
这几天项目有个特效需要实现,具体的要求就是在规定时间内完成金额从0到N的展示,由于项目比较紧张,所以就找了个三方控件来实现。但是三方控件毕竟不是自己的,所以在完成项目所需效果之后还是有必要自己研究一下的。先看一下效果图:在这里插入图片描述
我实现这种效果主要用到了ValueAnimator,不过在数值变化方面由于系统的ValueAnimator只提供了ofInt和ofFloat两种方式,这两种方式在精度控制方面都无法满足需求。所以需要我们使用另外一种方式ofObject结合自定义TypeEvaluator来实现。

实现步骤

1 自定义TypeEvaluator

自定义TypeEvaluator 命名为MyTypeEvaluator,由于TypeEvaluator是一个接口,所以我们要实现TypeEvaluator并且重写evaluate方法。

MyTypeEvaluator需要指定一个泛型类型,由于最终展示的效果需要保留两位小数,所以使用Double作为泛型类型。具体代码如下

class MyTypeEvaluator implements TypeEvaluator<Double>{
    @Override
    public Double evaluate(float fraction, Double startValue, Double endValue) {
       double value=startValue+fraction*(endValue-startValue);
        return value;
    }

evaluate返回对startvalue和endvalue进行线性插值的运算结果其中,fraction表示开始值和结束值的比例,计算公式:result = startValue + fraction * (endvalue - startvalue) 。startvalue和endvalue就是在ofObject中设置的开始和结束参数值

2 ofObject和自定义TypeEvaluator结合

ValueAnimator animator = ValueAnimator.ofObject(myTypeEvaluator,0.00,500.10);
//                ValueAnimator animator = ValueAnimator.(0.00,500.10);
                animator.setDuration(5000);
                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        DecimalFormat format=new DecimalFormat("#0.00");
//
                        tv_num.setText(format.format(animation.getAnimatedValue())+"");
                    }
                });
                animator.start();

startvalue 0;
end value 500.10
动画时长5s
为animator添加addUpdateListener监听,这个监听主要用来监听动画执行过程中的数值变化情况。重写onAnimationUpdate方法并且为控件赋值,animation.getAnimatedValue()可以获取到变化之后的数值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值