LVGL 对象层级

LVGL创建对象层级顺序

默认情况下,LVGL在背景上绘制旧对象,在前景上绘制新对象。

例如,假设我们向父对象添加了一个名为 button1 的按钮,然后又添加了另一个名为button2的按钮。 由于先创建了 button1,所以 button1 会被 button2 及其子对象覆盖。

LVGL创建对象层级顺序

/*Create a screen*/
lv_obj_t * scr = lv_obj_create(NULL, NULL);
lv_scr_load(scr);                                                               /*Load the screen*/

/*Create 2 buttons*/
lv_obj_t * btn1 = lv_btn_create(scr, NULL);         /*Create a button on the screen*/
lv_btn_set_fit(btn1, true, true);                   /*Enable to automatically set the size according to the content*/
lv_obj_set_pos(btn1, 60, 40);                                   /*Set the position of the button*/

lv_obj_t * btn2 = lv_btn_create(scr, btn1);         /*Copy the first button*/
lv_obj_set_pos(btn2, 180, 80);                          /*Set the position of the button*/

/*Add labels to the buttons*/
lv_obj_t * label1 = lv_label_create(btn1, NULL);        /*Create a label on the first button*/
lv_label_set_text(label1, "Button 1");                  /*Set the text of the label*/

lv_obj_t * label2 = lv_label_create(btn2, NULL);        /*Create a label on the second button*/
lv_label_set_text(label2, "Button 2");                  /*Set the text of the label*/

/*Delete the second label*/
lv_obj_del(label2);

LVGL将图层设到前台(foreground)展示

有几种方法可以将对象置于前台:

  • 使用 lv_obj_set_top(obj,true) 。如果 obj 或它的任何子对象被点击,那么 LVGL 将自动将该对象带到前台。它的工作原理类似于PC机上典型的GUI,当点击背景中的窗口时,它会在前台展示。
  • 使用lv_obj_move_foreground(obj) 显式地告诉库将对象带到前台。类似地,使用 lv_obj_move_background(obj) 将对象 obj 移动到背台。
  • 当使用 lv_obj_set_parent(obj,new_parent) 时, obj 将在 new_parent 的前面。

LVGL顶层和系统层

LVGL 有两个特殊的图层; layer_toplayer_sys 。两者在显示器的所有屏幕上都是可见且通用的。 但是,它们不会在多个物理显示器之间共享。 layer_top 始终位于默认屏幕 ( lv_scr_act() )的顶部, layer_sys 则位于 layer_top 的顶部。用户可以使用 layer_top 来创建一些随处可见的内容。例如,菜单栏,弹出窗口等。如果启用了 click 属性,那么 layer_top 将吸收所有用户单击并充当模态。

lv_obj_set_click(lv_layer_top(), true);

layer_sys 也用于LVGL。例如,它将鼠标光标放在那里以确保它始终可见。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程