【技术】在LVGL中用户界面的基本构建块之对象层级和事件的介绍
本文华芯微特将分享LVGL基础知识,创建对象层级顺序,事件(Events)使用方法,介绍了事件类型,详细说明了用户界面的基本构建块和对象层级和事件的介绍。
引言
在LVGL中,用户界面的基本构建块是对象,也称为小部件(widget)。默认情况下,LVGL在背景上绘制旧对象,在前景上绘制新对象。
对象层级(Layers)
创建对象层级顺序
默认情况下,LVGL在背景上绘制旧对象,在前景上绘制新对象。
例如,假设我们向父对象添加了一个名为 button1 的按钮,然后又添加了另一个名为button2的按钮。由于先创建了 button1,所以 button1 会被 button2 及其子对象覆盖。
将图层设到前台(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_top 和 layer_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。例如,它将鼠标光标放在那里以确保它始终可见。
事件(Events)
LVGL中可触发事件,用于与用户进行交互。例如一个对应对象的事件可以有:
•被点击
•被拖拽
•被更改了数值
•等等
可以将回调函数分配给对象以处理这些事件。例如:
事件类型
事件类型有如下几种:
通用事件
所有对象(例如 Buttons/Labels/Sliders 等)都可以接收这些通用事件。
与输入设备有关的事件
当用户按下/释放对象时,将发送这些消息。它们不仅用于指针,还可以用于键盘,编码器和按钮输入设备。访问输入设备概述部分以了解有关它们的更多信息。
•LV_EVENT_PRESSED 该对象被按下
•LV_EVENT_PRESSING 按下对象(按下时连续发送)
•LV_EVENT_PRESS_LOST 输入设备仍在按,但不再在对象上
•LV_EVENT_SHORT_CLICKED 在 LV_INDEV_LONG_PRESS_TIME 时间之前发布。如果拖动则不调用
•LV_EVENT_LONG_PRESSED 按下 LV_INDEV_LONG_PRESS_TIME 时间。如果拖动则不调用
•LV_EVENT_LONG_PRESSED_REPEAT 在每 LV_INDEV_LONG_PRESS_REP_TIME 毫秒的 LV_INDEV_LONG_PRESS_TIME 之后调用。如果拖动则不调用
•LV_EVENT_CLICKED 如果未拖动则调用释放(无论长按)
•LV_EVENT_RELEASED 在上面每种情况下都被调用,即使对象已被拖动也被释放。如果在按下并从对象外部释放时从对象上滑出,则不会调用。在这种情况下,将发送 LV_EVENT_PRESS_LOST
指针相关的事件
这些事件仅由类似指针的输入设备(例如鼠标或触摸板)触发
•LV_EVENT_DRAG_BEGIN 开始拖动对象
•LV_EVENT_DRAG_END 拖动完成(包括拖动)
•LV_EVENT_DRAG_THROW_BEGIN 拖动开始(用“动量”拖动后释放)
与键盘和编码器相关的事件
这些事件由键盘和编码器输入设备发送。在 [overview/indev](输入设备)部分中了解有关组的更多信息。
•LV_EVENT_KEY 键值发送到对象。通常在按下它或在长按之后重复时。可以通过以下方式检索键值 uint32_t * key = lv_event_get_data()
•LV_EVENT_FOCUSED 该对象集中在其组中
•LV_EVENT_DEFOCUSED 该对象在其组中散焦
一般事件
LVGL库发送的其他一般事件。
•LV_EVENT_DELETE 该对象正在被删除。释放相关的用户分配数据。
特殊事件
这些事件特定于特定的对象类型。
•LV_EVENT_VALUE_CHANGED 对象值已更改(例如,对于滑块)
•LV_EVENT_INSERT 有内容插入到对象中。(通常到文本区域)
•LV_EVENT_APPLY 单击“确定”,“应用”或类似的特定按钮。(通常来自键盘对象)
•LV_EVENT_CANCEL 单击“关闭”,“取消”或类似的特定按钮。(通常来自键盘对象)
•LV_EVENT_REFRESH 查询以刷新对象。永远不会由库发送,但可以由用户发送。
请访问特定对象类型的文档,以了解对象类型使用了哪些事件。
自定义事件包含的数据
一些事件可能包含自定义数据。例如,在某些情况下, LV_EVENT_VALUE_CHANGED 会告知新值。有关更多信息,请参见特定对象类型的文档。要在事件回调中获取自定义数据,请使用 lv_event_get_data() 。
自定义数据的类型取决于发送对象,但如果是下面两种情况需要特殊对待:
•数值,则为 uint32_t * 或 int32_t * 类型
•字符,则为 char * 或 const char * 类型
手动发送事件
任意事件
要将事件手动发送到对象,请使用 lv_event_send(obj, LV_EVENT_..., &custom_data) 。
例如,它可以通过模拟按钮按下来手动关闭消息框(尽管有更简单的方法):
/*Simulate the press of the first button (indexes start from zero)*/
uint32_t btn_id = 0;
lv_event_send(mbox, LV_EVENT_VALUE_CHANGED, &btn_id);
刷新事件
LV_EVENT_REFRESH 是特殊事件,因为它旨在供用户用来通知对象刷新自身。一些例子:
•通知标签根据一个或多个变量(例如当前时间)刷新其文本
•语言更改时刷新标签
•如果满足某些条件,请启用按钮(例如,输入正确的PIN)
•如果超出限制,则向对象添加样式/从对象删除样式等
处理类似情况的最简单方法是利用以下函数:
lv_event_send_refresh(obj) 只是 lv_event_send(obj, LV_EVENT_REFRESH, NULL) 的包装。因此,它仅向对象发送 LV_EVENT_REFRESH 。
lv_event_send_refresh_recursive(obj) 将 LV_EVENT_REFRESH 事件发送给对象及其所有子对象。如果将 NULL 作为参数传递,则将刷新所有显示的所有对象。
以上就关于在LVGL中,用户界面的基本构建块之对象层级和事件的介绍。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由海底沉心转载自华芯微特,原文标题为:LVGL基础知识(二),本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
【技术】LVGL按钮的讲解
LVGL按钮是简单的矩形对象。它们源自容器,因此也可以提供布局和配合。此外,可以启用它以在单击时自动进入检查状态。本文华芯微特将对LVGL按钮进行详细的讲解。
技术探讨 发布时间 : 2022-04-23
【技术】LVGL进度条讲解:零件和样式及其用法
LVGL进度条对象上有一个背景和一个指示器。指示器的宽度根据进度条的当前值进行设置。如果对象的宽度小于其高度,则可以创建垂直进度条。不仅可以设置进度条的结束值,还可以设置进度条的起始值,从而改变指示器的起始位置。本文华芯微特将从零件和样式、用法两个方面来讲LVGL进度条。
技术探讨 发布时间 : 2022-04-22
【技术】LVGL中用户界面的基本构建块之对象
在LVGL中,用户界面的基本构建块是对象,也称为小部件(widget)。本文华芯微特主要是介绍LVGL的对象模块。在LVGL中,用户界面的基本构建块是对象,也称为小部件(widget)。例如,按钮,标签,图像,列表,图表或文本区域。
技术探讨 发布时间 : 2022-04-09
【经验】如何使用JFLASH擦除、写入及读取华芯微特指定型号MCU
本文介绍了华芯微特MCU产品如何使用第三方Segger公司的JFLASH配合J-Link仿真器对指定型号MCU的Flash进行擦除、写入及读取操作。
设计经验 发布时间 : 2022-12-22
【经验】华芯微特SWM341/SWM34S系列MCU环境配置指南
华芯微特MCU的系列之SWM341&SWM34S,内核相同,34S在341基础上内置了SDRAM。341芯片使用M33内核,基于ARM-V8指令集的架构,对应的工具版本有更高的要求。本文中华芯微特将为大家介绍SWM341/SWM34S系列MCU环境配置指南。
设计经验 发布时间 : 2023-09-26
华芯微特SWM341 ISP模式参考
本文介绍华芯微特SWM341MCU ISP模式。
设计经验 发布时间 : 2024-11-11
华芯微特(Synwit)32位MCU选型表
目录- 32位微控制器
型号- SWM19SC9T6-50,SWM241PBT7-80,SWM260PBT7-80,SWM181RCT6-50,SWM211,SWM21DC8U7-50,SWM211G6S7-65,SWM181C9T6-50,SWM241KBT7-80,SWM34SRET6-50,SWM21PG6S7-65,SWM34SVET6-50,SWM341RET7-50,SWM260KBT7-80,SWM320RET7-50,SWM201G6S7-65,SWM181DBU6-40,SWM211C8T7-50,SWM201C6T7-50,SWM341CET7-50,SWM190CBT7-50,SWM201,SWM320VET7-50,SWM320,SWM20PG6S6-65,SWM341,SWM241,SWM260,SWM181,SWM19SCBT7-50,SWM320CET7-50,SWM190,SWM32SRET6-50,SWM190RBT7-50,SWM241CBT7-50,SWM181CBT6-50,SWM20DC6U7-50,SWM21DK6U7-50,SWM341VET7-50,SWM260CBT7-50,SWM34SCET6-50
【应用】华芯微特高速吹风筒电机控制解决方案,主频可达90MHz,具有堵转、过流、过压、过温保护等功能
随着生活品质的提高,人们对吹风机的要求不只是将头发吹干,与此同时还要求不伤发、能养发的功能需求,华芯微特目前推出了2款高速吹风筒电机控制解决方案(即SWM211C8T7-50,SWM211G6S7-65),具有堵转、过流、过压、过温保护等功能。
应用方案 发布时间 : 2023-05-30
使用华芯微特SWM341系列MCU环境配置
SWM341是华芯微特的其中一款MCU,341和341+内置SDRAM的34S系列,其内核相同。本文中华芯微特来为大家介绍使用SWM341系列MCU环境配置,希望对各位工程师朋友有所帮助。
设计经验 发布时间 : 2024-10-27
以华芯微特SWM341/SWM34S系列MCU芯片,介绍从软件层面降低MCU功耗的方法
随着集成电路技术的飞速发展,MCU的功耗问题逐渐成为设计和应用中必须考虑的关键因素。低功耗设计对于提高电路可靠性、降低成本以及延长电池寿命具有至关重要的作用。本文档主要是以华芯微特SWM341/SWM34S系列芯片,介绍从软件层面降低MCU功耗的方法分享。
设计经验 发布时间 : 2024-09-03
华芯微特(Synwit)32位MCU选型指南
目录- 公司介绍&产品分类 TFT-LCD 显示和人机界面(HMI)用微控制器 电机专用微控制器 大家电 & 工控通用微控制器 32位微控制器选型表
型号- SWM34X,SWM320 SERIES,SWM 201C6T7-50,SWM19SCBT6-50,SWM190 SERIES,SWM 201 系列,SWM32SRET6,SWM181CCT6-50,SWM260KBT7-80,SWM190KBT6-80,SWM201G6S7-65,SWM 201,SWM 201G6S7-65,SWM 19S 系列,SWM201,SWM260 SERIES,SWM320,SWM19S,SWM160,SWM20PG6S6,SWM20D,SWM32SRET6-50,SWM 20PG6S6-65,SWM 190,SWM181CBT6-50,SWM260CBT7-50,SWM260PBT7-80,SWM 260 系列,SWM32S,SWM181 SERIES,SWM181RCT6-50,SWM20P,SWM260CBT7,SWM160C8T7-50,SWM190CBT6-50,SWM20G,SWM 190 系列,SWM 260,SWM 181,SWM201 SERIES,SWM320RET7-50,SWM181DBU6-40,SWM181CBT6,SWM160 SERIES,SWM 341,SWM 341 系列,SWM190 系列,SWM201C6T7-50,SWM 181 系列,SWM320VET7-50,SWM341,SWM190RBT6-50,SWM20PG6S6-65,SWM260,SWM181,SWM320CET7-50,SWM190
华芯微特基于SWM166系列主控制器的车载无线充电器应用方案介绍
汽车车载无线充作为一种绝佳的无线充电应用场景,无需频繁插拔充电线,是增加行车安全、提高车主生活品质的一大利器,极大的改善了车内手机使用和充电的体验。本文介绍基于SWM166系列的车载无线充电器应用方案。
应用方案 发布时间 : 2024-05-07
基于华芯微特ugui上位机工程使用串口烧录素材应用指南
本文介绍基于华芯微特ugui上位机工程怎么使用串口烧录素材。
设计经验 发布时间 : 2024-08-23
华芯微特主控芯片SWM34S系列助力智能阀门控制器屏驱显示,适用于10.1寸及以下TFT屏
阀门控制器是一种用于控制阀门开闭状态的设备。它可以通过接收信号,控制阀门的开度,从而实现对流体的控制和调节。智能阀门控制器带有一个显示屏,用以设置和显示阀门调节的各类参数。该显示屏从传统的断码屏,逐步升级为TFT彩屏。本文推荐华芯微特主控芯片SWM34S。
应用方案 发布时间 : 2024-07-10
电子商城
登录 | 立即注册
提交评论