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

ValueAnimator的addUpdateListener重复输出相同数值问题求助

ValueAnimator重复输出相同数值的解决方案

问题原因

ValueAnimator的addUpdateListener会在动画的每一渲染帧触发回调,动画的插值计算是基于时间的连续变化。当你把animatedValue强制转为Int时,相邻几帧的插值结果可能落在同一个整数区间,自然会重复输出相同的整数数值。

解决方法

添加一个变量记录上一次输出的数值,仅当当前数值与上一次不同时才打印日志,代码修改如下:

ValueAnimator
    .ofInt(0, 100)
    .setDuration(Duration.ofSeconds(5).toMillis())
    .apply {
        var lastProgress = -1 // 初始化一个和起始值不同的默认值
        doOnStart {}
        addUpdateListener {
            val progress = it.animatedValue as Int
            if (progress != lastProgress) {
                Log.d("tag", "$progress")
                lastProgress = progress
            }
        }
        doOnEnd {}
    }.start()

补充说明

如果希望动画的数值变化更贴合"逐次+1"的节奏,也可以调整ValueAnimator的插值器,但上述方法是最直接解决日志重复问题的方案,不会改变动画本身的流畅性。

内容的提问来源于stack exchange,提问作者Arman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:22:01