You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:24:12