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

星级评分条(Rating Bar)动画无法停在指定星级的问题求助

解决星级评分动画无法停在指定星级的问题

看起来你遇到的核心问题是动画的目标值设置错了——原代码里你把动画的终点固定设为了5f,所以不管你在switch里给stars设置了多少星级,动画启动后都会从你设置的初始值继续往5星跑,最后自然会填满所有星级。

修复思路

我们需要根据sc的计算结果,动态设置动画的目标星级,而不是固定让动画跑到5星。这样动画结束后就会停在你期望的1/2/3星位置。

修改后的代码

int sc = total % 10;
float targetRating;

// 根据sc值确定最终要停的星级
switch(sc){
    case 5:
    case 6:
        targetRating = 1f;
        break;
    case 7:
    case 8:
        targetRating = 2f;
        break;
    case 9:
    case 0:
        targetRating = 3f;
        break;
    default:
        targetRating = stars.getRating(); // 默认保持当前星级,避免异常情况
}

// 创建从当前星级过渡到目标星级的动画
ObjectAnimator anim = ObjectAnimator.ofFloat(stars, "rating", stars.getRating(), targetRating);
anim.setDuration(2000);
anim.start();

为什么原代码不生效?

原代码的逻辑是:先手动设置stars的星级,然后启动一个从“当前星级(你刚设置的1/2/3)”到5f的动画。动画一旦启动,会持续更新stars的rating属性,所以你手动设置的星级会被动画覆盖,最终跑到5星的位置。

额外小优化

如果希望动画是从0开始过渡到目标星级,可以把动画的起始值改成0f:

ObjectAnimator anim = ObjectAnimator.ofFloat(stars, "rating", 0f, targetRating);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:12