LVGL常见面试题

什么是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值