22 lines
1.7 KiB
Plaintext
22 lines
1.7 KiB
Plaintext
|
|
# 工单 WO-06:时间设置界面整屏闪烁改成局部刷新
|
|||
|
|
|
|||
|
|
**优先级**:中
|
|||
|
|
**状态**:进行中
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 问题列表
|
|||
|
|
|
|||
|
|
1. 时间设置界面(`set_clock_app`)调整小时/分钟时的闪烁效果,现在是每次闪烁状态翻转就整屏 `LCD_Clear()` 再全部重画,视觉上是整屏黑一下亮一下,而不是只有正在调节的那个数字在闪。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 实现思路
|
|||
|
|
|
|||
|
|
- 根因:`App/ui.c` 的 `UI_ShowSetTimePage()` 函数开头无条件 `LCD_Clear(COLOR_BLACK)`,然后重画锁头图标、电池、小时、冒号、分钟、AM/PM、日期全部元素;而 `App/app_set_clock.c` 的 `SetClockApp_onRun()` 每 500ms 闪烁状态翻转一次就整个调用这个函数。
|
|||
|
|
- 改法:拆成两个函数——
|
|||
|
|
- 一个"整页绘制"函数,只在真正进入时间设置界面(`SetClockApp_OnStart()`)或调节字段切换(长按 CONFIRM 切换 小时/分钟 焦点)时调用一次,负责画锁头、电池、冒号、AM/PM、日期这些不变的静态内容,以及当前的小时、分钟数字。
|
|||
|
|
- 一个"局部刷新"函数,只负责重画正在调节的那个数字所在的矩形区域(先 `LCD_FillRect` 成黑色,再按闪烁状态决定是否写回数字),`SetClockApp_onRun()` 里每次闪烁翻转只调用这个局部刷新函数,不再动其它区域。
|
|||
|
|
- 需要确定小时/分钟数字在屏幕上的准确坐标和尺寸(参照现有 `LCD_ShowString16x32(23, 100, ...)` / `LCD_ShowString16x32(75, 100, ...)` 调用,16x32 字体两位数字宽度为 32px),局部刷新时精确擦除这一块,不多不少。
|
|||
|
|
- 涉及文件:`App/ui.c`(拆分 `UI_ShowSetTimePage`)、`App/ui.h`(新增局部刷新函数声明)、`App/app_set_clock.c`(`OnStart`/字段切换调用整页绘制,`onRun` 调用局部刷新)。
|