如何基于ValueAnimator实现长整型日期值的00:00格式动画?
实现Long类型的时间动画并格式化00:00
嘿,我来帮你搞定这个需求!你之前用Double实现了计数器动画,现在要切换成Long类型并通过DateUtils格式化出00:00的样式,其实核心思路和之前一致,只需要调整类型适配和格式化逻辑就好,下面是具体实现方案:
完整代码示例
import android.text.format.DateUtils; import android.animation.ValueAnimator; import android.animation.TypeEvaluator; import android.widget.TextView; // 假设你已经有对应的TextView实例textView,以及目标秒数longValue(比如120秒,对应02:00) ValueAnimator valueAnimator = new ValueAnimator(); // 替换成Long类型的起始和结束值 valueAnimator.setObjectValues(0L, longValue); // 添加动画更新监听,这里用DateUtils格式化时间 valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { Long currentSeconds = (Long) animation.getAnimatedValue(); // 使用DateUtils.formatElapsedTime将秒数转为MM:SS格式 String formattedTime = DateUtils.formatElapsedTime(currentSeconds); textView.setText(formattedTime); } }); // 可选:Long类型的Evaluator,其实ValueAnimator默认支持Long类型,这里写出来更清晰 valueAnimator.setEvaluator(new TypeEvaluator<Long>() { @Override public Long evaluate(float fraction, Long startValue, Long endValue) { return startValue + (long) ((endValue - startValue) * fraction); } }); // 设置动画时长,和你之前保持一致 valueAnimator.setDuration(1200); valueAnimator.start();
关键说明
- 类型切换:把原来的
Double全部替换成Long,因为DateUtils.formatElapsedTime接收的参数是代表秒数的long类型。 - 格式化逻辑:
DateUtils.formatElapsedTime(long seconds)会自动把秒数转换成MM:SS的格式(比如65秒会变成01:05),完全符合你要的00:00样式。 - Evaluator简化:其实ValueAnimator默认已经内置了Long类型的Evaluator,所以你也可以省略自定义Evaluator的代码,直接调用
valueAnimator.setObjectValues(0L, longValue)后正常启动动画即可,效果完全一致。
内容的提问来源于stack exchange,提问作者JavierSegoviaCordoba
相关产品推荐
相关产品推荐

