什么是LVGL?LVGL的主要特点是什么?
LVGL(Light and Versatile Graphics Library)是一个开源的嵌入式图形库,用于创建GUI(图形用户界面)。它专为嵌入式设备(如微控制器、单片机和嵌入式 Linux 设备)设计,具有轻量级、可扩展和高效的特点。LVGL 适用于 低功耗、小存储、低算力 的硬件环境。
LVGL中的屏幕(Screen)是什么?如何创建和切换屏幕?
在 LVGL 中,屏幕(Screen) 是 GUI 界面的基本单位,相当于一个独立的页面。每个屏幕可以包含多个 UI 组件(Widgets),例如按钮、滑块、标签等。LVGL 允许创建多个屏幕,并在它们之间自由切换,以实现不同的界面布局。
下面是通过SquareLine生成的ui_helper.c文件中有关屏幕的两个函数。在修改代码之前存在一个错误,就是_ui_screen_delete()函数中*target = NULL错误地写成了**target = NULL,导致虽然屏幕删除了但指针没有置NULL,在下一次调用_ui_screen_change()的时候没有初始化屏幕,导致错误。还有两个小问题,第一是原始代码没有将不用的屏幕删除,而是在一开始就全部初始化,导致内存占用过高;第二是使用了lv_scr_load_anim()带动画,导致切换屏幕时间变长,换成lv_scr_load不带动画可以更快地切换屏幕。
void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void))
{
if(*target == NULL)
target_init();
lv_obj_t *cur_scr = lv_scr_act();
// lv_scr_load_anim(*target, fademode, spd, delay, false);
lv_scr_load(*target);
if(cur_scr == ui_main) _ui_screen_delete(&ui_main);
if(cur_scr == ui_Disp) _ui_screen_delete(&ui_Disp);
if(cur_scr == ui_FileExp) _ui_screen_delete(&ui_FileExp);
if(cur_scr == ui_Camera) _ui_screen_delete(&ui_Camera);
}
void _ui_screen_delete(lv_obj_t ** target)
{
if(*target != NULL) {
lv_obj_del(*target);
*target = NULL;
}
}
总结:
通过lv_obj_create(NULL)创建屏幕。
通过void lv_scr_load(* scr)不带动画切换屏幕,通过lv_scr_load_anim(*target, fademode, spd, delay, false)带动画切换屏幕。
通过lv_obj_del(*target)删除屏幕。
LVGL如何设置元件的位置?
LVGL可以通过lv_obj_set_align或者lv_obj_align_to设置元件的位置,比如下面两段代码:
ui_DispScrSettingsLabel = lv_label_create(ui_DispScrSettingsBtn);
lv_obj_set_width(ui_DispScrSettingsLabel, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_DispScrSettingsLabel, LV_SIZE_CONTENT); /// 1
lv_obj_set_align(ui_DispScrSettingsLabel, LV_ALIGN_CENTER);
lv_label_set_text(ui_DispScrSettingsLabel

最低0.47元/天 解锁文章
8857

被折叠的 条评论
为什么被折叠?



