扇区触摸与角度变量
圆形热区当旋钮:按下/拖动把落点极角 0~359 写入变量。
把 触摸区 的命中形状设成 扇区,再绑 角度变量,就得到一个没有滑块图的圆形旋钮:手指绕圆心拖,软件把落点极角写入变量。
适合音量、亮度、温度、航向这类「拧一圈」的交互。直线拖动请用 滑动条。
角约定
画布提示 Sector 0=up CW 的意思是:
| 项 | 约定 |
|---|---|
| 0° | 正上(12 点) |
| 正方向 | 顺时针:90° 右、180° 下、270° 左 |
| 写入值 | 绝对极角 0~359,不是 0~扫过角 |
| 何时写 | 按下、拖动开始、拖动中、拖动结束(不是「点击」才写) |
| 圆心 | 正好点在圆心时不写 |
起始角° / 扫过角° 只决定哪一块能点中。例如起始 0°、扫过 270°,可点区域是 12 点顺时针到 9 点(左上 90° 缺口点不中)。按下之后即使拖出扇区,仍按整圈写 0~359。
本期 不是 环形滑块:没有内半径、没有绕圈拇指图。外接框仍用 X/Y/宽高。
实用场景
| 场景 | 怎么用这个角度 |
|---|---|
| 音量 / 亮度 / 温度 / 风量 | 0~359 再映射到 0~100 或量程 |
| 航向 / 风向 / 云台 | 值本身就是方位角 |
| 圆形菜单 | 用区间判断:0~90 项 1、90~180 项 2… |
| 仪表指针跟手 | 用标签变量按值换文案、颜色或图 |
不适合:普通加减(按钮)、开关(触摸开关)、直线进度(滑动条 / 进度条)。
怎么配
1. 先建变量
打开 变量设计,建一个 I32(推荐名如 sector_deg),最小 0、最大 359。不要用布尔(只会变成 0/1)。
2. 扇区热区
- 放一块触摸区,命中形状选 扇区。
- 填起始角、扫过角(可点范围)。
- 角度变量 下拉选刚建的变量。
事件绑定可以先保持 点击 / 无。写角度不占用、也不吞掉跳页或回调;同一热区仍可另绑点击跳页等。
不要 再用「设置变量」去写同一个角度变量,否则会把刚算的角度盖成固定值。
3. 屏幕上显示度数(可选)
写变量和画字是两条线:只绑角度变量,画面上的 000 不会自己跟手变。
若要跟手显示:
- 放一个标签变量(或 软字库 / 内嵌字),关联变量 选同一个
sector_deg。 - 给扇区 添加事件绑定:事件选 按下 和 拖动(不要只靠点击,点击要抬手才发生)。
- 动作选 设置变量,设一个 别的 占位变量(不要设
sector_deg)。 - 配 刷新回调,刷新关联勾上那个数字标签。
顺序是:先写入真实角度 → 再设占位变量 → 刷新回调按标签自己绑的 sector_deg 重画。
只给 MCU 用、屏上不显示数字时,第 3 步可以不做。
效果演示
效果演示 里拖扇区会写入模拟变量。数字要跟手刷,同样需要上面的刷新关联;否则变量已经在变,字还停在 000。
下位机怎么读
导出后角度在运行时 ui_vars 里(和滑动条改的是同一套表),不是 RuiBuilder.c 里的全局变量。
ui_var_t* v = ui_var_get(UI_VAR_sector_deg);
int32_t deg = (v != 0) ? v->v.i32 : 0;
/* 映射到音量、航向,或上报主机 */
切页后 Page_Show 会刷本页显示;拖动过程中要跟手,仍靠上面的刷新回调。