对象层级(Layers)

创建对象层级顺序

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

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

http://photos.100ask.net/lvgl/03_overview/02_Layers/layers.png
 1    /*Create a screen*/
 2    lv_obj_t * scr = lv_obj_create(NULL, NULL);
 3    lv_scr_load(scr);                                                               /*Load the screen*/
 4
 5    /*Create 2 buttons*/
 6    lv_obj_t * btn1 = lv_btn_create(scr, NULL);         /*Create a button on the screen*/
 7    lv_btn_set_fit(btn1, true, true);                   /*Enable to automatically set the size according to the content*/
 8    lv_obj_set_pos(btn1, 60, 40);                                   /*Set the position of the button*/
 9
10    lv_obj_t * btn2 = lv_btn_create(scr, btn1);         /*Copy the first button*/
11    lv_obj_set_pos(btn2, 180, 80);                          /*Set the position of the button*/
12
13    /*Add labels to the buttons*/
14    lv_obj_t * label1 = lv_label_create(btn1, NULL);        /*Create a label on the first button*/
15    lv_label_set_text(label1, "Button 1");                  /*Set the text of the label*/
16
17    lv_obj_t * label2 = lv_label_create(btn2, NULL);        /*Create a label on the second button*/
18    lv_label_set_text(label2, "Button 2");                  /*Set the text of the label*/
19
20    /*Delete the second label*/
21    lv_obj_del(label2);

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

1    lv_obj_set_click(lv_layer_top(), true);

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