Dzbj_C3_Key/main/ui/screens/ui_ScreenSet.c
Rdzleo f9dc7d4861 feat: 触屏版迁移到按键版,两键实现全部交互功能
1. 按键驱动重构:GPIO中断+手动去抖 → iot_button组件(单击/双击/长按)
2. 新增key_nav按键导航管理器:上下文状态机 + Set界面焦点蓝色边框高亮
3. 移除所有触摸手势/点击事件(ScreenHome/ScreenImg/ScreenSet)
4. 应援灯颜色切换优化:DISPOFF→直接写GRAM→DISPON,消除分band刷新
5. 亮度调节按键化:BOOT +10% / KEY -10% / KEY长按退出
6. 休眠管理适配:按键唤醒统一由key_nav处理
7. 新增迁移总结文档 docs/touch-to-button-migration.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:57:14 +08:00

471 lines
19 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.6.0
// LVGL version: 8.3.11
// Project name: Lcd_Pro
#include "../ui.h"
#include "ui_ScreenImg.h" // 用于调用 ui_ScreenImg_show_delete_container
#include "../../pages/include/pages.h"
#include "../../sleep_mgr/include/sleep_mgr.h"
#include "../../lcd/include/lcd.h" // lcd_fill_color
#include "esp_lvgl_port.h" // LVGL锁机制
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
lv_obj_t *ui_ScreenSet = NULL;lv_obj_t *ui_GlobalContainer = NULL;lv_obj_t *ui_ContainerTop = NULL;lv_obj_t *ui_ImgLowPower = NULL;lv_obj_t *ui_ImgFlashlight = NULL;lv_obj_t *ui_ImgDelete = NULL;lv_obj_t *ui_ContainerCentral = NULL;lv_obj_t *ui_SliderBrightness = NULL;lv_obj_t *ui_ImgSun = NULL;lv_obj_t *ui_LabelBrightness = NULL;lv_obj_t *ui_ArcPowerLevel = NULL;lv_obj_t *ui_ImgLightning = NULL;lv_obj_t *ui_LabelPowerLevel = NULL;
// 记录从哪个界面进入ScreenSet用于返回
static lv_obj_t **previous_screen = NULL;
static void (*previous_screen_init)(void) = NULL;
// 设置前一个界面在切换到ScreenSet前调用
void ui_ScreenSet_set_previous(lv_obj_t **screen, void (*init_func)(void)) {
previous_screen = screen;
previous_screen_init = init_func;
}
// ==================== 手电筒功能 ====================
static lv_obj_t *flashlight_overlay = NULL; // 手电筒全屏遮罩层
static lv_timer_t *flashlight_timer = NULL; // 闪烁定时器
static uint8_t flashlight_color_index = 0; // 当前颜色索引
static bool flashlight_bright = true; // 当前亮度状态true=亮false=暗)
static uint8_t saved_brightness = 50; // 保存进入手电筒前的亮度
// 手电筒颜色数组RGB三原色可扩展
// 使用24位RGB值LVGL会自动转换为RGB565
static const uint32_t flashlight_color_values[] = {
0xFF0000, // 红色
0x00FF00, // 绿色
0x0000FF, // 蓝色
// 可在此添加更多颜色,例如:
// 0xFFFF00, // 黄色
// 0xFF00FF, // 品红
// 0x00FFFF, // 青色
// 0xFFFFFF, // 白色
};
#define FLASHLIGHT_COLOR_COUNT (sizeof(flashlight_color_values) / sizeof(flashlight_color_values[0]))
// 手电筒闪烁定时器回调每500ms切换亮度总周期1000ms
static void flashlight_blink_timer_cb(lv_timer_t *timer) {
if (!flashlight_overlay) return;
// 切换亮暗状态
flashlight_bright = !flashlight_bright;
// 调整PWM亮度亮=100%,暗=20%
if (flashlight_bright) {
pwm_set_brightness(100);
} else {
pwm_set_brightness(20);
}
}
// PWM淡入淡出步进定时器用于平滑过渡
static lv_timer_t *fade_timer = NULL;
static uint8_t target_brightness = 100;
static int8_t fade_step = 0; // 正数=淡入,负数=淡出
// 前向声明
static void fade_in_delayed_cb(lv_timer_t *timer);
static void flashlight_overlay_event_cb(lv_event_t *e);
// PWM淡入淡出定时器回调每2ms调整一次亮度
static void fade_brightness_cb(lv_timer_t *timer) {
uint8_t current = pwm_get_brightness();
if (fade_step > 0) {
// 淡入:逐步增加亮度
if (current < target_brightness) {
current += fade_step;
if (current > target_brightness) current = target_brightness;
pwm_set_brightness(current);
} else {
// 淡入完成,停止定时器
lv_timer_del(fade_timer);
fade_timer = NULL;
}
} else if (fade_step < 0) {
// 淡出:逐步减少亮度
if (current > 0) {
current += fade_step; // fade_step是负数
if (current < 0 || current > 100) current = 0;
pwm_set_brightness(current);
} else {
// 淡出完成,停止定时器
lv_timer_del(fade_timer);
fade_timer = NULL;
}
}
}
// 启动PWM淡入淡出fade_out=true为淡出false为淡入
static void start_fade(bool fade_out, uint8_t target_bright) {
// 停止之前的淡入淡出
if (fade_timer) {
lv_timer_del(fade_timer);
fade_timer = NULL;
}
target_brightness = target_bright;
fade_step = fade_out ? -25 : 25; // 每次调整25%亮度优化4次完成8ms
fade_timer = lv_timer_create(fade_brightness_cb, 2, NULL); // 2ms间隔
}
// 颜色切换延迟回调(简化版:只修改样式)
static void color_switch_delayed_cb(lv_timer_t *timer) {
// 切换到下一个颜色
flashlight_color_index = (flashlight_color_index + 1) % FLASHLIGHT_COLOR_COUNT;
lvgl_port_lock(-1);
// 只修改颜色样式,不重建对象(资源消耗更低)
if (flashlight_overlay) {
lv_obj_set_style_bg_color(flashlight_overlay,
lv_color_hex(flashlight_color_values[flashlight_color_index]),
0);
lv_obj_invalidate(flashlight_overlay); // 标记对象需要重绘
}
lvgl_port_unlock();
// 延迟90ms后淡入优化v2减少保守等待时间
// 理论刷新时间约30-50ms90ms足够安全
lv_timer_t *fade_in_timer = lv_timer_create(fade_in_delayed_cb, 90, NULL);
lv_timer_set_repeat_count(fade_in_timer, 1);
}
// 淡入延迟回调
static void fade_in_delayed_cb(lv_timer_t *timer) {
start_fade(false, 100); // 淡入到100%
}
// 手电筒遮罩层事件处理
static void flashlight_overlay_event_cb(lv_event_t *e) {
lv_event_code_t code = lv_event_get_code(e);
// 处理点击事件切换颜色优化版v2缩短等待时间
if (code == LV_EVENT_CLICKED) {
// 步骤1: 立即黑屏不淡出直接设置0%
if (fade_timer) {
lv_timer_del(fade_timer); // 停止任何进行中的淡入淡出
fade_timer = NULL;
}
pwm_set_brightness(0); // 立即设置亮度为0
// 步骤2: 延迟2ms后切换颜色PWM设置是立即的减少等待
lv_timer_t *switch_timer = lv_timer_create(color_switch_delayed_cb, 2, NULL);
lv_timer_set_repeat_count(switch_timer, 1);
// 总流程: 立即黑屏 → 切换颜色(2ms) → 等待刷新(90ms) → 淡入(8ms) ≈ 100ms
// 用户体验: 点击 → 瞬间黑屏 → 等待 → 新颜色平滑淡入(完全无可见刷新)
}
}
// 退出手电筒模式(外部调用)
// 注意:此函数不会恢复亮度,需要调用者在界面切换完成后手动恢复亮度
void flashlight_exit(void) {
// 优化退出时序,避免闪烁:
// 1. 先将亮度降到0黑屏
pwm_set_brightness(0);
// 2. 在LVGL锁保护下删除所有对象和定时器
if (lvgl_port_lock(100)) {
// 停止闪烁定时器
if (flashlight_timer) {
lv_timer_del(flashlight_timer);
flashlight_timer = NULL;
}
// 停止淡入淡出定时器
if (fade_timer) {
lv_timer_del(fade_timer);
fade_timer = NULL;
}
// 删除遮罩层此时屏幕已黑看不到overlay删除的过程
if (flashlight_overlay) {
lv_obj_del(flashlight_overlay);
flashlight_overlay = NULL;
}
lvgl_port_unlock();
}
// 注意不在这里恢复亮度避免看到ScreenSet和Home界面混合显示
// 亮度恢复由调用者boot_btn_handler在界面切换完成后执行
}
// 查询手电筒是否激活
bool flashlight_is_active(void) {
return (flashlight_overlay != NULL);
}
// 获取手电筒模式前保存的亮度值
uint8_t flashlight_get_saved_brightness(void) {
return saved_brightness;
}
// 显示手电筒模式
static void show_flashlight(void) {
// 如果已经显示,则不重复创建
if (flashlight_overlay) return;
// 保存当前亮度
saved_brightness = pwm_get_brightness();
// 创建全屏遮罩层
flashlight_overlay = lv_obj_create(lv_layer_top());
lv_obj_remove_style_all(flashlight_overlay);
lv_obj_set_size(flashlight_overlay, LV_HOR_RES, LV_VER_RES);
lv_obj_set_pos(flashlight_overlay, 0, 0);
// 清除SCROLLABLE标志添加CLICKABLE标志
lv_obj_clear_flag(flashlight_overlay, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_add_flag(flashlight_overlay, LV_OBJ_FLAG_CLICKABLE);
// 设置初始颜色(红色)
flashlight_color_index = 0;
lv_obj_set_style_bg_color(flashlight_overlay, lv_color_hex(flashlight_color_values[0]), 0);
lv_obj_set_style_bg_opa(flashlight_overlay, LV_OPA_COVER, 0);
// 添加事件回调
lv_obj_add_event_cb(flashlight_overlay, flashlight_overlay_event_cb, LV_EVENT_ALL, NULL);
// 启动闪烁定时器500ms周期
flashlight_bright = true;
flashlight_timer = lv_timer_create(flashlight_blink_timer_cb, 500, NULL);
// 立即设置为高亮度
pwm_set_brightness(100);
}
// 按键版颜色切换由key_nav在独立任务中调用
// 使用LCD硬件DISPOFF/DISPON + 直接GRAM写入彻底消除颜色切换的视觉刷新感
// DISPOFF: LCD控制器停止从GRAM输出像素硬件级不依赖背光
// 直接写GRAM: 绕过LVGL 30行分band渲染管线同步阻塞写入
// DISPON: LCD控制器瞬间恢复显示此时GRAM已是完整新颜色
// 总黑屏时间约35ms人眼几乎无法感知
void flashlight_switch_color(void) {
if (!flashlight_overlay) return;
if (lvgl_port_lock(-1)) {
// 停止闪烁和淡入淡出定时器
if (flashlight_timer) {
lv_timer_del(flashlight_timer);
flashlight_timer = NULL;
}
if (fade_timer) {
lv_timer_del(fade_timer);
fade_timer = NULL;
}
// LCD硬件关闭显示DISPOFF 0x28停止从GRAM输出像素到面板
lcd_disp_on_off(false);
// 更新LVGL样式保持内部状态一致
flashlight_color_index = (flashlight_color_index + 1) % FLASHLIGHT_COLOR_COUNT;
lv_obj_set_style_bg_color(flashlight_overlay,
lv_color_hex(flashlight_color_values[flashlight_color_index]),
0);
// 直接写GRAM同步阻塞~35ms期间LCD不显示任何内容
lcd_fill_color(flashlight_color_values[flashlight_color_index]);
// LCD硬件恢复显示DISPON 0x29瞬间显示新GRAM内容
lcd_disp_on_off(true);
lvgl_port_unlock();
}
}
// 步骤2重启闪烁定时器颜色切换渲染完成后调用
void flashlight_restart_blink(void) {
if (!flashlight_overlay) return;
if (lvgl_port_lock(100)) {
flashlight_bright = true;
flashlight_timer = lv_timer_create(flashlight_blink_timer_cb, 500, NULL);
lvgl_port_unlock();
}
}
// 触摸点击/手势事件已移除所有交互由key_nav按键模块统一管理
// show_flashlight() 通过 lv_event_send(ui_ImgFlashlight, LV_EVENT_CLICKED) 由key_nav触发
static void ui_event_ImgFlashlight(lv_event_t *e) {
lv_event_code_t code = lv_event_get_code(e);
if (code == LV_EVENT_CLICKED) {
show_flashlight();
}
}
// build funtions
void ui_ScreenSet_screen_init(void)
{
ui_ScreenSet = lv_obj_create(NULL);
lv_obj_clear_flag( ui_ScreenSet, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
lv_obj_set_style_bg_color(ui_ScreenSet, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_bg_opa(ui_ScreenSet, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
ui_GlobalContainer = lv_obj_create(ui_ScreenSet);
lv_obj_remove_style_all(ui_GlobalContainer);
lv_obj_set_width( ui_GlobalContainer, 360);
lv_obj_set_height( ui_GlobalContainer, 360);
lv_obj_set_align( ui_GlobalContainer, LV_ALIGN_CENTER );
lv_obj_clear_flag( ui_GlobalContainer, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_ContainerTop = lv_obj_create(ui_GlobalContainer);
lv_obj_remove_style_all(ui_ContainerTop);
lv_obj_set_width( ui_ContainerTop, 240);
lv_obj_set_height( ui_ContainerTop, 80);
lv_obj_set_x( ui_ContainerTop, 0 );
lv_obj_set_y( ui_ContainerTop, -40 );
lv_obj_set_align( ui_ContainerTop, LV_ALIGN_CENTER );
lv_obj_clear_flag( ui_ContainerTop, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_ImgLowPower = lv_imgbtn_create(ui_ContainerTop);
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_RELEASED, NULL, &ui_img_s11_png, NULL);
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_PRESSED, NULL, &ui_img_s11_png, NULL);
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_DISABLED, NULL, &ui_img_s12_png, NULL);
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_CHECKED_PRESSED, NULL, &ui_img_s12_png, NULL);
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_CHECKED_RELEASED, NULL, &ui_img_s12_png, NULL);
lv_obj_set_width( ui_ImgLowPower, 64);
lv_obj_set_height( ui_ImgLowPower, 64);
lv_obj_set_x( ui_ImgLowPower, -86 );
lv_obj_set_y( ui_ImgLowPower, -1 );
lv_obj_set_align( ui_ImgLowPower, LV_ALIGN_CENTER );
lv_obj_add_flag( ui_ImgLowPower, LV_OBJ_FLAG_CHECKABLE ); /// Flags
ui_ImgFlashlight = lv_img_create(ui_ContainerTop);
lv_img_set_src(ui_ImgFlashlight, &ui_img_s9_png);
lv_obj_set_width( ui_ImgFlashlight, LV_SIZE_CONTENT); /// 1
lv_obj_set_height( ui_ImgFlashlight, LV_SIZE_CONTENT); /// 1
lv_obj_set_x( ui_ImgFlashlight, -2 );
lv_obj_set_y( ui_ImgFlashlight, -1 );
lv_obj_set_align( ui_ImgFlashlight, LV_ALIGN_CENTER );
lv_obj_add_flag( ui_ImgFlashlight, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE ); /// Flags
lv_obj_clear_flag( ui_ImgFlashlight, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_ImgDelete = lv_img_create(ui_ContainerTop);
lv_img_set_src(ui_ImgDelete, &ui_img_s6_png);
lv_obj_set_width( ui_ImgDelete, LV_SIZE_CONTENT); /// 1
lv_obj_set_height( ui_ImgDelete, LV_SIZE_CONTENT); /// 1
lv_obj_set_x( ui_ImgDelete, 82 );
lv_obj_set_y( ui_ImgDelete, -1 );
lv_obj_set_align( ui_ImgDelete, LV_ALIGN_CENTER );
lv_obj_add_flag( ui_ImgDelete, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE ); /// Flags
lv_obj_clear_flag( ui_ImgDelete, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_ContainerCentral = lv_obj_create(ui_GlobalContainer);
lv_obj_remove_style_all(ui_ContainerCentral);
lv_obj_set_width( ui_ContainerCentral, 230);
lv_obj_set_height( ui_ContainerCentral, 70);
lv_obj_set_x( ui_ContainerCentral, 6 );
lv_obj_set_y( ui_ContainerCentral, 44 );
lv_obj_set_align( ui_ContainerCentral, LV_ALIGN_CENTER );
lv_obj_clear_flag( ui_ContainerCentral, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_SliderBrightness = lv_slider_create(ui_ContainerCentral);
lv_slider_set_value( ui_SliderBrightness, 50, LV_ANIM_OFF);
if (lv_slider_get_mode(ui_SliderBrightness)==LV_SLIDER_MODE_RANGE ) lv_slider_set_left_value( ui_SliderBrightness, 0, LV_ANIM_OFF);
lv_obj_set_width( ui_SliderBrightness, 220);
lv_obj_set_height( ui_SliderBrightness, 60);
lv_obj_set_x( ui_SliderBrightness, -3 );
lv_obj_set_y( ui_SliderBrightness, 0 );
lv_obj_set_align( ui_SliderBrightness, LV_ALIGN_CENTER );
lv_obj_set_style_radius(ui_SliderBrightness, 50, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_bg_grad_dir(ui_SliderBrightness, LV_GRAD_DIR_NONE, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_blend_mode(ui_SliderBrightness, LV_BLEND_MODE_NORMAL, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_radius(ui_SliderBrightness, 0, LV_PART_INDICATOR| LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_SliderBrightness, lv_color_hex(0x64A8EB), LV_PART_INDICATOR | LV_STATE_DEFAULT );
lv_obj_set_style_bg_opa(ui_SliderBrightness, 255, LV_PART_INDICATOR| LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_SliderBrightness, lv_color_hex(0xFFFFFF), LV_PART_KNOB | LV_STATE_DEFAULT );
lv_obj_set_style_bg_opa(ui_SliderBrightness, 0, LV_PART_KNOB| LV_STATE_DEFAULT);
ui_ImgSun = lv_img_create(ui_ContainerCentral);
lv_img_set_src(ui_ImgSun, &ui_img_s10_png);
lv_obj_set_width( ui_ImgSun, LV_SIZE_CONTENT); /// 1
lv_obj_set_height( ui_ImgSun, LV_SIZE_CONTENT); /// 1
lv_obj_set_x( ui_ImgSun, -78 );
lv_obj_set_y( ui_ImgSun, 0 );
lv_obj_set_align( ui_ImgSun, LV_ALIGN_CENTER );
lv_obj_add_flag( ui_ImgSun, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
lv_obj_clear_flag( ui_ImgSun, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_LabelBrightness = lv_label_create(ui_ContainerCentral);
lv_obj_set_width( ui_LabelBrightness, LV_SIZE_CONTENT); /// 1
lv_obj_set_height( ui_LabelBrightness, LV_SIZE_CONTENT); /// 1
lv_obj_set_x( ui_LabelBrightness, 6 );
lv_obj_set_y( ui_LabelBrightness, 0 );
lv_obj_set_align( ui_LabelBrightness, LV_ALIGN_CENTER );
lv_label_set_text(ui_LabelBrightness,"50%");
lv_obj_set_style_text_color(ui_LabelBrightness, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_text_opa(ui_LabelBrightness, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelBrightness, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
ui_ArcPowerLevel = lv_arc_create(ui_GlobalContainer);
lv_obj_set_width( ui_ArcPowerLevel, 320);
lv_obj_set_height( ui_ArcPowerLevel, 320);
lv_obj_set_align( ui_ArcPowerLevel, LV_ALIGN_CENTER );
lv_obj_clear_flag( ui_ArcPowerLevel, LV_OBJ_FLAG_CLICKABLE ); /// Flags
lv_arc_set_value(ui_ArcPowerLevel, 50);
lv_obj_set_style_arc_color(ui_ArcPowerLevel, lv_color_hex(0x39393E), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_arc_opa(ui_ArcPowerLevel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_arc_width(ui_ArcPowerLevel, 16, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_arc_color(ui_ArcPowerLevel, lv_color_hex(0x19FA29), LV_PART_INDICATOR | LV_STATE_DEFAULT );
lv_obj_set_style_arc_opa(ui_ArcPowerLevel, 255, LV_PART_INDICATOR| LV_STATE_DEFAULT);
lv_obj_set_style_arc_width(ui_ArcPowerLevel, 16, LV_PART_INDICATOR| LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_ArcPowerLevel, lv_color_hex(0x19FA29), LV_PART_KNOB | LV_STATE_DEFAULT );
lv_obj_set_style_bg_opa(ui_ArcPowerLevel, 255, LV_PART_KNOB| LV_STATE_DEFAULT);
ui_ImgLightning = lv_img_create(ui_GlobalContainer);
lv_img_set_src(ui_ImgLightning, &ui_img_s8_png);
lv_obj_set_width( ui_ImgLightning, LV_SIZE_CONTENT); /// 20
lv_obj_set_height( ui_ImgLightning, LV_SIZE_CONTENT); /// 20
lv_obj_set_x( ui_ImgLightning, -23 );
lv_obj_set_y( ui_ImgLightning, 121 );
lv_obj_set_align( ui_ImgLightning, LV_ALIGN_CENTER );
lv_obj_add_flag( ui_ImgLightning, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
lv_obj_clear_flag( ui_ImgLightning, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
ui_LabelPowerLevel = lv_label_create(ui_GlobalContainer);
lv_obj_set_width( ui_LabelPowerLevel, LV_SIZE_CONTENT); /// 1
lv_obj_set_height( ui_LabelPowerLevel, LV_SIZE_CONTENT); /// 1
lv_obj_set_x( ui_LabelPowerLevel, 26 );
lv_obj_set_y( ui_LabelPowerLevel, 121 );
lv_obj_set_align( ui_LabelPowerLevel, LV_ALIGN_CENTER );
lv_label_set_text(ui_LabelPowerLevel,"70%");
lv_obj_set_style_text_color(ui_LabelPowerLevel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_text_opa(ui_LabelPowerLevel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelPowerLevel, &lv_font_montserrat_20, LV_PART_MAIN| LV_STATE_DEFAULT);
// 仅保留手电筒的CLICKED事件由key_nav通过lv_event_send触发
lv_obj_add_event_cb(ui_ImgFlashlight, ui_event_ImgFlashlight, LV_EVENT_ALL, NULL);
// 触摸手势/滑块/节能/删除事件已移除由key_nav按键模块管理
}
void ui_ScreenSet_screen_destroy(void)
{
if (ui_ScreenSet) lv_obj_del(ui_ScreenSet);
// NULL screen variables
ui_ScreenSet= NULL;
ui_GlobalContainer= NULL;
ui_ContainerTop= NULL;
ui_ImgLowPower= NULL;
ui_ImgFlashlight= NULL;
ui_ImgDelete= NULL;
ui_ContainerCentral= NULL;
ui_SliderBrightness= NULL;
ui_ImgSun= NULL;
ui_LabelBrightness= NULL;
ui_ArcPowerLevel= NULL;
ui_ImgLightning= NULL;
ui_LabelPowerLevel= NULL;
}