Skip to content

设计清晰易读的仪表 ​

做仪表时,可以先决定一个最重要的信息,再围绕它安排其他内容。可读性往往比增加更多装饰更有帮助。

先建立信息层级 ​

建议一张卡片只保留一项主读数,搭配少量辅助信息。例如:

主读数辅助信息合适的形式
速度单位、进度范围大号数字 + 小号单位 + 进度条
合成 G 值横向、纵向方向圆盘 + 小字读数
方位方位角度指针 + 方位文字
行程距离移动时间、本次峰值多行小面板
当前位置定位精度地图 + 清晰的标题区域

优先跟随环境颜色 ​

jsx
const ink = $env.foreground;
const accent = $env.accent;
const muted = $env.dark ? '#FFFFFF99' : '#12171C99';

不必给整个仪表填不透明背景。外层卡片已经提供自己的背景;保留透明绘图,可以让作品更好地融入 CapDrive 的动态外观。

使用可用尺寸,而不是猜屏幕宽度 ​

从 $env.width、$env.height 计算图形尺寸;若使用 CardContent,通过 renderer 的 metrics 扣除标题和推荐边距。

jsx
<CardContent title="速度" renderer={m => {
  const bodyWidth = Math.max(0, $env.width - m.supportedGapLeft - m.supportedGapRight);
  return <Text width={bodyWidth} fontSize={64} minimumScaleFactor={0.5}
    color={$env.foreground}>78</Text>;
}}/>

这里的 78 是设计占位数字,接入真实数据时请改为当前速度字段。

让变化容易理解 ​

  • 数字变化:使用 contentAnimation={{type: 'numericText'}}。
  • 进度和位置变化:只给需要变化的属性添加 animations。
  • 指针越过 359° / 0°:使用角度环绕,避免绕远路。
  • 系统开启“减弱动态效果”时:让静态画面本身依然可读。

不要通过无条件修改全局变量来制造动画时钟。原生动画可以平滑显示,不需要让脚本每个显示帧都执行。

最后检查缺测与极值 ​

至少检查速度缺失、负向 G 值、接近 0° 的方位、较长单位文字和狭小尺寸。对进度条使用 Math.max(0, Math.min(1, value)) 限制比例,对缺测读数保留 —。

图中阈值是你设置的显示规则,不能自动代替道路限速识别。用标签写清楚阈值的含义,避免把自定义范围误认为 App 获取了地图限速。