LVGL实现页面切换

一、定义全局容器变量

static lv_obj_t *contanier1= NULL;
static lv_obj_t *contanier2= NULL;

二、在LVGL初始化代码后初始化容器

contanier1= lv_obj_create(lv_scr_act());
lv_obj_set_size(contanier1,320,240);//设置容器大小
lv_obj_set_style_radius(contanier1,0,0);//设置容器圆角为直角

contanier2= lv_obj_create(lv_scr_act());
lv_obj_set_size(contanier2,320,240);
lv_obj_set_style_radius(contanier2,0,0);

三、将要显示的控件创建到对应的容器中

类似于这样,此处为了方便演示写了两个按钮用于切换界面,使用按键回调函数来实现切换

lv_obj_t * SETTINGS = lv_btn_create(contanier1);
lv_obj_add_event_cb(SETTINGS, SETTINGS_event_handler, LV_EVENT_CLICKED, NULL);
lv_obj_set_pos(SETTINGS,125,125);
lv_obj_set_size(SETTINGS, 80, 80);
lv_obj_t * SETTINGS_TXT = lv_label_create(SETTINGS);
lv_label_set_text_fmt(SETTINGS_TXT, "SETTINGS");
lv_obj_center(SETTINGS_TXT);

lv_obj_t * MUSIC = lv_btn_create(contanier2);
lv_obj_add_event_cb(MUSIC, MUSIC_event_handler, LV_EVENT_CLICKED, NULL);
lv_obj_set_pos(MUSIC,125,20);
lv_obj_set_size(MUSIC, 80, 80);
lv_obj_t * MUSIC_TXT = lv_label_create(MUSIC);
lv_label_set_text_fmt(MUSIC_TXT, "MUSIC");
lv_obj_center(MUSIC_TXT);

 

四、在对应的回调函数中隐藏其他容器

static void MUSIC_event_handler(lv_event_t * e)//菜单界面触发音乐
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) 
    {
      lv_obj_add_flag(contanier1, LV_OBJ_FLAG_HIDDEN);
      lv_obj_clear_flag(contanier2, LV_OBJ_FLAG_HIDDEN);
     }
}

static void SETTINGS_event_handler(lv_event_t * e)//菜单界面触发设置
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) 
    {
      lv_obj_add_flag(contanier2, LV_OBJ_FLAG_HIDDEN);
      lv_obj_clear_flag(contanier1, LV_OBJ_FLAG_HIDDEN);
     }
}

 

五、其它

如果创建的页面很多得话而只需要显示一个容器建议写一个display函数

void display_containers (lv_obj_t * obj)
{
//将所有容器以如下形式放在此处
lv_obj_add_flag(container1, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(container2, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(container3, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(container4, LV_OBJ_FLAG_HIDDEN);


lv_obj_clear_flag(obj,LV_OBJ_FLAG_HIDDEN);
}

之后要切换容器只需将在回调函数中调用display_containers函数即可

您这个方法是将页面全部创建然后依次显示,带来的问题就是这么做会导致单片机预留的内存容易溢出。

2023-09-05 · IP 属地安徽
长亭古道送君行
对的,需要注意关闭页面来释放内存
2023-09-06 · IP 属地湖北
长亭古道送君行
只能用在一些简单的页面里

回调函数写反了,建议测试后再分享,谢谢

2023-02-08 · IP 属地广东
长亭古道送君行
感谢指正,我查看后修改,确实是我从我工程里随便扣出来的
posted @ 2024-05-08 17:05  苍月代表我  阅读(233)  评论(0)    收藏  举报