银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-11-28 | yang | 初次建立 |
默认情况下,LVGL 在背景上绘制旧对象,在前景上绘制新对象。例如,假设我们在屏幕中创建一个名为 button1 的按钮,然后又创建另一个名为 button2 的按钮。然后你会发现 button1(及其子对象)将在背景图层中,并且可以被 button2 及其子对象覆盖。
void lv_gui_run(void) { lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL); /* 在屏幕中创建button1 */ lv_obj_set_pos(btn1, 80, 50); /* 设置button1坐标 */ lv_obj_set_size(btn1, 150, 100); /* 设置button1尺寸 */ lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), btn1); /* 在屏幕中创建button2 */ lv_obj_set_pos(btn2, 180, 80); /* 设置button2坐标 */ lv_obj_set_size(btn2, 150, 100); /* 设置button2尺寸 */ lv_obj_t * label1 = lv_label_create(btn1, NULL); /* 在button1中创建一个标签子对象 */ lv_label_set_text(label1, "Button 1"); /* 设置标签内容 */ lv_obj_t * label2 = lv_label_create(btn2, NULL); /* 在button2中创建一个标签子对象 */ lv_label_set_text(label2, "Button 2"); /* 设置标签内容 */ }
有几种方法可以将对象置于前台:
下面的例子是使用第一种方式,通过点击将按钮自动置于前台。
void lv_gui_run(void) { lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL); /* 在屏幕中创建button1 */ lv_obj_set_pos(btn1, 80, 50); /* 设置button1坐标 */ lv_obj_set_size(btn1, 150, 100); /* 设置button1尺寸 */ lv_obj_set_top(btn1, true); /* 被点击时置于前景图层 */ lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), btn1); /* 在屏幕中创建button2 */ lv_obj_set_pos(btn2, 180, 80); /* 设置button2坐标 */ lv_obj_set_size(btn2, 150, 100); /* 设置button2尺寸 */ lv_obj_set_top(btn2, true); /* 被点击时置于前景图层 */ lv_obj_t * label1 = lv_label_create(btn1, NULL); /* 在button1中创建一个标签子对象 */ lv_label_set_text(label1, "Button 1"); /* 设置标签内容 */ lv_obj_t * label2 = lv_label_create(btn2, NULL); /* 在button2中创建一个标签子对象 */ lv_label_set_text(label2, "Button 2"); /* 设置标签内容 */ }
下面的例子是使用第二种方式,通过软件命令将按钮自动置于前台。
void lv_gui_run(void) { lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL); /* 在屏幕中创建button1 */ lv_obj_set_pos(btn1, 80, 50); /* 设置button1坐标 */ lv_obj_set_size(btn1, 150, 100); /* 设置button1尺寸 */ lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), btn1); /* 在屏幕中创建button2 */ lv_obj_set_pos(btn2, 180, 80); /* 设置button2坐标 */ lv_obj_set_size(btn2, 150, 100); /* 设置button2尺寸 */ lv_obj_t * label1 = lv_label_create(btn1, NULL); /* 在button1中创建一个标签子对象 */ lv_label_set_text(label1, "Button 1"); /* 设置标签内容 */ lv_obj_t * label2 = lv_label_create(btn2, NULL); /* 在button2中创建一个标签子对象 */ lv_label_set_text(label2, "Button 2"); /* 设置标签内容 */ while(true){ lv_obj_move_foreground(btn1); /* 将button1置于前景图层 */ rt_thread_mdelay(1000); lv_obj_move_foreground(btn2); /* 将button2置于前景图层 */ rt_thread_mdelay(1000); } }
LVGL 使用两个特殊的层,分别名为 layer_top 和 layer_sys。两者在显示器的所有屏幕上都是可见的和常见的。但是,它们不能在多个物理显示器之间共享。layer_top 总是位于默认屏幕的顶部 ( lv_scr_act() ),而 layer_sys 位于 layer_top 的顶部 用户可以使用 layer_top 创建一些随处可见的内容。例如,一个菜单栏,一个弹出窗口等等。如果单击属性是启用的,那么 layer_top 将吸收所有用户单击,并作为一个模块运行。
lv_obj_set_click (lv_layer_top(), true);
在 LVGL 上 layer_sys 也用于类似的目的。例如,LVGL将鼠标光标放在系统层上,以确保它总是可见的。