数字跳动自增特效

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

实现步骤

1 自定义TypeEvaluator

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

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

class MyTypeEvaluator implements TypeEvaluator{@Overridepublic 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() {@Overridepublic 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()可以获取到变化之后的数值。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部