先把结论放在前面:Compose 动画的本质是"状态驱动的属性插值"——把一个Animatable/State<Float>从当前值插到目标值,而目标值来自状态。所以动画的所有问题都来自一件事:状态被谁改、什么时候改、改的频率是多少。 三个必答的坑——在动画回调里改状态形成循环、列表项用全局动画状态、动画状态与业务状态混在一起——都是这个本质的推论。
这题能把"看过资料"和"写过代码"区分开:看过的人停留在animate*AsState的名字,写过的人能说出"这三个 API 的重启条件是什么、什么时候该选哪个"。能把选型讲清,这题就过了。
四个 API 的选型判据
| API | 值类型 | 重启条件 | 适用 |
|---|---|---|---|
animateDpAsState/animateFloatAsState | 单个值 | 目标值变化时 | 最简单的淡入淡出、位移、颜色 |
animateIntAsState(Color) | 整数/颜色 | 目标值变化 |