LVGL开发-2.显示例程的解析
该博客通过对例程代码进行解析,从而学习LVGL
例程代码的运行
该例程为LVGL库自带例程,函数名字为:lv_example_libpng_1();
导入的步骤省略。运行代码如下:
1 | int main(void) |
运行效果为在屏幕中央显示文字。
函数内容
该函数的内容如下:
1 | void lv_example_libpng_1(void) |
需要注意的是,该函数前方有一个宏定义判断,效果为显示图片。我们仅对这部分进行解析。
这段代码使用LVGL创建了一个标签并设置其文本为 “Hello world”,然后将该标签在屏幕上居中显示。
lv_obj_t
lv_obj_t是一个结构体类型,代表一个 LVGL 的对象(object)。
LVGL 中的各种界面元素,如按钮、标签、容器等都是从这个基本的对象类型派生出来的。
lv_obj_t结构体包含了许多用于描述和操作图形对象的成员变量,例如位置、大小、样式、事件处理函数等。通过对这些成员变量的操作,可以实现对图形界面元素的各种属性和行为的控制。
查看定义:
1 | struct _lv_obj_t { |
发现这个结构体中包含了非常多的成员信息。以下是对该结构体各个成员的解释:
const lv_obj_class_t * class_p
:指向对象的类定义结构体的指针,用于确定对象的类型和行为。lv_obj_t * parent
:指向该对象的父对象的指针,用于构建对象层次结构。lv_obj_spec_attr_t * spec_attr
:可能用于存储特定于对象的属性。lv_obj_style_t * styles
:指向对象的样式结构体的指针,用于定义对象的外观。#if LV_OBJ_STYLE_CACHE
相关部分:可能用于缓存样式相关的属性设置状态。void * user_data
:允许用户关联自定义的数据到对象。#if LV_USE_OBJ_ID
部分:如果启用了对象 ID 功能,这里将存储对象的唯一标识。lv_area_t coords
:存储对象的坐标和大小信息。lv_obj_flag_t flags
:用于设置对象的各种标志,以控制对象的行为。lv_state_t state
:表示对象的状态,例如正常、按下、禁用等。uint16_t layout_inv : 1
:可能是一个位标志,用于指示布局是否被反转。uint16_t readjust_scroll_after_layout : 1
:位标志,用于指示在布局后是否重新调整滚动。uint16_t scr_layout_inv : 1
:可能与屏幕布局反转相关的标志。uint16_t skip_trans : 1
:位标志,用于指示是否跳过过渡效果。uint16_t style_cnt : 6
:可能用于存储样式的数量。uint16_t h_layout : 1
:位标志,用于指示水平布局状态。uint16_t w_layout : 1
:位标志,用于指示垂直布局状态。uint16_t is_deleting : 1
:位标志,用于指示对象是否正在被删除。
于是我们就得出,lv_obj_t * label;创建了一个lvgl部件的句柄。
1 | lv_label_create(lv_screen_active()); |
这行代码的作用是在当前活动的屏幕上创建一个标签(label)对象。
lv_label_create是 LVGL 中的一个函数,用于创建一个标签对象。它返回一个指向新创建的标签对象的指针(类型为lv_obj_t*)。
lv_screen_active()是另一个 LVGL 函数,它返回当前活动的屏幕对象的指针(同样是lv_obj_t*类型)。这个活动屏幕通常是当前显示在设备上的屏幕,可能是主屏幕或其他活动的显示区域。
通过将lv_screen_active()的结果作为参数传递给lv_label_create,新创建的标签将被添加到当前活动的屏幕上,成为该屏幕上的一个图形元素。之后,可以使用其他 LVGL 函数来设置这个标签的属性,如文本内容、位置、大小、样式等。
那么之后的代码也显而易见了。
lv_label_set_text(label, “Hello world”);
实现的是对这个标签设置一个text文本信息
lv_obj_center(label);
实现的是将这个标签置到屏幕中间。
实战修改
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1186703947@qq.com