动画
通过 animations 为支持的 View 属性设置过渡。属性得到新的目标值后,CapDrive 按声明的时长和曲线绘制中间状态。
动画如何触发
animations 是 View 上的动画声明数组。property 指定要控制的属性,例如 opacity 或 sweepAngle。该 View 的目标值改变时,对应动画开始过渡;单纯为固定属性添加动画,不会自动产生变化。
每个组件支持的属性列表见其页面。需要动态增删或重排子 View 时,为它们保留稳定的 key,以便更新仍对应同一个绘制对象。
时间、重复与角度
duration、delay 单位为秒,默认时长为 0.25 秒、延迟为零,默认曲线为 easeInOut。from/to 可明确起止目标,repeat 和 autoreverse 控制重复及往返。同一属性只应由一个声明控制。
周期属性可使用 wrap 选择跨周期的过渡路径。例如 startAngle 从 350° 到 10° 可使用 wrap: 360。sweepAngle 表示实际扫过的角度,保留正负方向,不支持 wrap。
示例:速度圆弧
选择速度后,示例将 0–200 的速度范围换算成 0–360°。当速度从 50 变为 100 时,目标角度从 90° 变为 180°,圆弧用 0.25 秒完成过渡。量程使用当前速度单位;缺测时显示横线。
function main() {
const speed = $data.current.speed?.value;
if (speed == null) {
return (
<Text fontSize={32} color={$env.foreground}>
—
</Text>
);
}
return (
<Circle
width={120}
height={120}
background="clear"
stroke={$env.accent}
lineWidth={8}
startAngle={-90}
sweepAngle={Math.max(0, Math.min(1, speed / 200)) * 360}
animations={[
{ property: 'sweepAngle', duration: 0.25, curve: 'easeOut' },
]}
/>
);
}
内容变化与动态效果
contentAnimation 用于文字、图片或图表数据等内容更新。支持类型由具体组件决定,例如数字文字过渡和图形数据插值。
形状插值需要前后结构可对应,例如 Polyline 点数和闭合设置相同、Path 命令序列相同。结构不兼容时直接更新。动画由绘制端执行,不需要在 main() 中循环计时;动画也不会提高传感器或 OBD 的实际更新频率。