lvgl 这篇文章的英文原版我是在 https://lvgl.io/上下载得到的。其实在一开始我本来不想翻译
的,但是用到了 lvgl 时,就顺便翻译了,现在 lvgl 是 7.4.0 版本了吧,如果下方翻译的不好,请不要骂我,因为我
翻译也是不容易的,我把下班的时间用来翻译了,一周上六天班,上班也是挺忙的,下班时从晚上 8 点开始着手
翻译,周日也是花半天时间,花费了两个月时间,所以我希望这份文档对你们有帮助,其实在不影响工作的情
况下,本人也是愿意花费这个时间。也做了不少中文化的工作。所以我是打算利用工作之余,边看边
译,到读完这篇文档,也就有个中文版了,我不希望别人得到这个文档之后去变卖,其实大家一起学习
是最好的。
本人很懒,我不过就是不想花费时间到手机上而已,这文档没有翻译附录,而且译完正文后也没
有做过任何检查。所以如果有任何问题,请不要骂我。
Cai Xuefeng 一个爱玩嵌入式的小锋
Cai Xuefeng
第一章 LVGL 对象
1.1 对象的简介
在 LVGL 中,用户界面的基本构建块是对象,也称为小部件。例如,按钮,标签,图像,列表,图表或文本
区域。在此处检查所有对象类型。
1.2 对象的属性
1.2.1 基本属性
在 LVGL 中所有对象类型都共享一些基本属性:
(1) 尺寸
(2) 父母
(3) 拖动启用
(4) 单击启用等
(5) 位置
您可以使用 lv_obj_set_...和 lv_obj_get_...功能设置/获取这些属性。例如:
/*设置基础对象属性*/
lv_obj_set_size(btn1, 100, 50); /*按键大小*/
lv_obj_set_pos(btn1, 20,30); /*按键位置*/
1.2.2 具体属性
对象类型也具有特殊的属性。例如,滑块具有
(1) 当前值
(2) 自定义样式
(3) 最小值、最高值
对于这些属性,每种对象类型都有唯一的 API 函数。例如一个滑块:
/*设置滑块的特殊属性*/
lv_slider_set_range(slider1, 0, 100); /* 设置滑块的最小、最大值 */
lv_slider_set_value(slider1, 40, LV_ANIM_ON); /* 设置滑块当下值的位置 */
lv_slider_set_action(slider1, my_action); /* 设置滑块的回调函数 */
对象类型的 API 在其文档中进行了描述,但您也可以检查相应的头文件(例如 lv_objx / lv_slider.h)
1.3 工作机制
1.3.1 父类-子类的结构
父对象可以视为其子对象的容器。每个对象只有一个父对象(屏幕除外),但是一个父对象可以有无限多个子
Cai Xuefeng
对象。父对象的类型没有限制,但是有典型的父对象(例如按钮)和典型的子对象(例如标签)。
1.3.2 一起移动
如果更改了父类对象的位置,则子类对象将与父类对象一起移动。因此,所有位置都相对于父类。
(0; 0)坐标表示对象将独立于父对象的位置保留在父对象的左上角。
lv_obj_t * par = lv_obj_create(lv_scr_act(), NULL); /*
创建一个父类对象在屏幕中
*/
lv_obj_set_size(par, 100, 80); /*
设置父类对象的位置
*/
lv_obj_t * obj1 = lv_obj_create(par, NULL); /*
创建一个子类对象与父类对象中
*/
lv_obj_set_pos(obj1, 10, 10); /*
设置子类对象的位置
*/
修改父类对象的位置:
lv_obj_set_pos(par, 50, 50); /*
移动父类对象,子类对象跟着移动
.*/
1.3.3 仅在父类对象上可见
如果子类对象部分或全部不在其父级之外,则看不见外面的部分。
Cai Xuefeng
lv_obj_set_x(obj1, -30); /*Move the child a little bit of the parent*/
1.3.4 创建-删除对象
在 LVGL 中,可以在运行时动态创建和删除对象。这意味着仅当前创建的对象消耗 RAM。例如,如果需要图
表,则可以在需要时创建它,并在不可见或不必要时将其删除。
每个对象类型都有自己的带有统一原型的创建功能。它需要两个参数:
(1) 指向父对象的指针。要创建屏幕,请以 NULL 作为父级。
(2) (可选)用于复制具有相同类型的对象的指针。该复制对象可以为 NULL,以避免复制操作。
所有对象均以 C 语言中的 lv_obj_t 指针作为句柄进行引用。以后可以使用该指针设置或获取对象的属性。
创建函数如下所示:
lv_obj_t * lv_ <type>_create(lv_obj_t * parent, lv_obj_t * copy);
所有对象类型都有一个通用的删除功能。它删除对象及其所有子对象。
void lv_obj_del(lv_obj_t * obj);
lv_obj_del 将立即删除该对象。如果由于任何原因无法立即删除对象,可以使用 lv_obj_del_async(obj)。这很有
用,例如,如果您想在子 LV_EVENT_DELETE 信号中删除对象的父对象。
您可以使用以下方法删除对象的所有子对象(但不能删除对象本身)lv_obj_clean:
void lv_obj_clean(lv_obj_t * obj);
1.4 屏幕
1.4.1 创建屏幕
屏幕是没有父对象的特殊对象。因此,可以像这样创建它们:
lv_obj_t * scr1 = lv_obj_create(NULL, NULL);
可以使用任何对象类型创建屏幕。例如,创建墙纸的基础对象或图像。
1.4.2 获取活动屏幕
每个显示器上始终有一个活动屏幕。默认情况下,该库为每个显示创建并加载一个“基础对象”作为屏幕。
要获取当前活动的屏幕,请使用函数 lv_scr_act()来获取活动屏幕。
Cai Xuefeng
1.4.3 加载屏幕
要加载新屏幕,如以下函数原型
lv_scr_load(scr1)。
1.4.4 用动画加载屏幕
可以使用加载新屏幕的动画。
lv_scr_load_anim(scr, transition_type, time, delay, auto_del)
transition_type 存在以下转换类型,如表 1.4.4.1 所示:
参数
描述
LV_SCR_LOAD_ANIM_NONE
延时毫秒后立即切换
LV_SCR_LOAD_ANIM_OVER_LEFT/RIGHT/TOP/BOTTOM
将新屏幕移到给定方向上
LV_SCR_LOAD_ANIM_MOVE_LEFT/RIGHT/TOP/BOTTOM
将旧屏幕和新屏幕都移至给定方向
LV_SCR_LOAD_ANIM_FADE_ON
使新屏幕淡入旧屏幕
表 1.4.4.1 transition_type 存在以下转换类型描述
设置 auto_del 为 true 会在动画结束时自动删除旧屏幕。lv_scr_act()动画开始播放后,新屏幕将变为活动状
态。
1.4.5 处理多个显示
屏幕在当前选择的默认显示上创建。在默认显示是最后的注册显示屏 lv_disp_drv_register,也可以使用显式地
选择一个新的默认显示 lv_disp_set_default(disp)。
lv_scr_act(),lv_scr_load()并 lv_scr_load_anim()在默认屏幕上进行操作。
1.5 小部件
小部件可以包含多个部分。例如,按钮仅具有主要部分,而滑块则由背景,指示器和旋钮组成。
各部分的名称构造如下。例如。通常在将样式添加到对象时使用小部件。使用小部件可以将不同的样式分配
给对象的不同小部件。
LV_ + <TYPE> _PART_ <NAME>LV_BTN_PART_MAINLV_SLIDER_PART_KNOB
1.6 状态
该对象可以处于以下状态的组合:
LV_STATE_DEFAULT 正常,已发布
LV_STATE_CHECKED 切换或选中
LV_STATE_FOCUSED 通过键盘或编码器聚焦或通过触摸板/鼠标单击
LV_STATE_EDITED 由编码器编辑
LV_STATE_HOVERED 鼠标悬停(现在不支持)
LV_STATE_PRESSED 已按下
Cai Xuefeng