跳至内容
用户工具
登录
站点工具
搜索
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
icore4tlvgl_9
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-11-28 | yang | 初次建立 | ===== 实验九:Layers图层 ===== ==== 一、创建顺序 ==== 默认情况下,LVGL 在背景上绘制旧对象,在前景上绘制新对象。例如,假设我们在屏幕中创建一个名为 button1 的按钮,然后又创建另一个名为 button2 的按钮。然后你会发现 button1(及其子对象)将在背景图层中,并且可以被 button2 及其子对象覆盖。 {{ :icore4t:icore4t_rtt_lvgl_9_1.png?direct |}} <code c> 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"); /* 设置标签内容 */ } </code> ==== 二、设置到前景图层 ==== 有几种方法可以将对象置于前台: * 使用 **lv_obj_set_top (obj, true)**。如果 obj 或它的任何子对象被点击,那么 LVGL 将自动将该对象置于前台。它的工作原理类似于 PC 上的典型 GUI。当点击背景中的一个窗口时,它会自动来到前台。 * 使用 **lv_obj_move_foreground(obj)** 显式地告诉库将一个对象放到前台。类似地,使 用**lv_obj_move_background(obj)** 移动对象到背景图层中。 * 当 **lv_obj_set_parent(obj, new_parent)** 被使用时,obj 将在 new_parent 的前台。 下面的例子是使用第一种方式,通过点击将按钮自动置于前台。 {{ :icore4t:icore4t_rtt_lvgl_9_2.gif?direct |}} <code c> 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"); /* 设置标签内容 */ } </code> 下面的例子是使用第二种方式,通过软件命令将按钮自动置于前台。 {{ :icore4t:icore4t_rtt_lvgl_9_2.gif?direct |}} <code c> 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); } } </code> ==== 三、顶层和系统层 ==== LVGL 使用两个特殊的层,分别名为 **layer_top** 和 **layer_sys**。两者在显示器的所有屏幕上都是可见的和常见的。但是,它们不能在多个物理显示器之间共享。**layer_top** 总是位于默认屏幕的顶部 ( **lv_scr_act()** ),而 **layer_sys** 位于 **layer_top** 的顶部 用户可以使用 **layer_top** 创建一些随处可见的内容。例如,一个菜单栏,一个弹出窗口等等。如果单击属性是启用的,那么 **layer_top** 将吸收所有用户单击,并作为一个模块运行。 <code c> lv_obj_set_click (lv_layer_top(), true); </code> 在 LVGL 上 **layer_sys** 也用于类似的目的。例如,LVGL将鼠标光标放在系统层上,以确保它总是可见的。
icore4tlvgl_9.txt
· 最后更改: 2022/04/01 11:13 由
sean
页面工具
显示页面
修订记录
反向链接
回到顶部