合宙Air724UG LuatOS-Air LVGL API-概念

概念

在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。

属性

基本属性

所有对象类型都共享一些基本属性:

Position (位置)

Size (尺寸)

Parent (父母)

Click enable (单击启用)

我们可以使用 lvgl.obj_set_... 和 lvgl.obj_get_... 等前缀的函数设置或者获取这些属性。

例如:

-- 设置基础对象的属性

lvgl.obj_set_size(btn, 100, 50) -- 设置按键的大小

lvgl.obj_set_pos(btn, 20,30) -- 设置按键的位置

特殊属性

有些对象类型也具有特殊的属性。例如,滑块具有

min、max、values (最小最大值)

current value (当前值)

custom styles (自定义样式)

对于这些属性,每种对象类型都有唯一的 API 函数。例如一个滑块的 API 调用过程:

-- 设置滑块的特殊属性

lvgl.slider_set_range(slider, 0, 100) -- 设置滑块的最小值和最大值

lvgl.slider_set_value(slider, 40, LV_ANIM_ON) -- 设置当前值(屏幕坐标系位置)

lvgl.slider_set_action(slider, my_action) -- 设置回调函数

工作机制

继承

父对象可以作为其子对象的容器。每个对象只能一个父对象(屏幕除外),但是一个父对象可以有无限多个子对象。父对象的类型没有限制,但是有特殊的父对象(例如,按钮)和特殊的子对象(例如,标签)。

追随

如果更改了父对象的位置,则子对象将与父对象一起移动,并且子对象的位置都保持相对于父对象位置不变。 例如,坐标 (0,0) 表示子对象将独立于父对象的位置保留在父对象的左上角,代码:

par = lvgl.obj_create(lvgl.scr_act(), nil) -- 在当前屏幕中创建一个对象

lvgl.obj_set_size(par, 100, 80) -- 设置对象的大小

obj1 = lvgl.obj_create(par, nil) -- 基于前面创建的对象(par)创建一个子对象(obj1),之前的对像成为父对象

lvgl.obj_set_pos(obj1, 10, 10); -- 设置子对象的位置

202104011247331.png

当我们修改父对象的位置,子对象也会一起移动,以保持和父对象的相对位置不变:

lvgl.obj_set_pos(par, 50, 50); -- 移动父对象,子对象也会跟着移动,以保持相对位置不变

202104011247333.png

创建-删除

在LVGL中,可以在运行时动态地创建和删除对象。这意味着仅当前创建的对象需要消耗 RAM。例如,如果需要图表,我们可以在需要时创建它,并在不可见或不需要时将其删除。

每个对象类型都有各自的创建函数。它需要两个参数:

指向父对象的指针。创建屏幕时以 nil作为父级。

用于复制具有相同类型的对象的指针(可选)。如果不行进行复制操作为 nil。

创建函数如下所示:

lvgl._create(parent, copy)

lvgl.obj_del 将立即删除该对象。

我们可以使用 lv_obj_clean 删除对象的所有子对象(但不会删除对象本身):

lvgl.obj_clean(obj)

屏幕对象

创建屏幕对象

屏幕是没有父对象的特殊对象。应该像这样创建它们:

scr = lvgl.obj_create(nil, nil)

可以使用任何对象类型创建屏幕。例如:创建墙纸的基础对象或图像。

获取活动屏幕

这始终是每个显示屏上的活动屏幕。默认情况下,该库为每个显示创建并加载 "基础对象" 作为屏幕。

要获取当前活动的屏幕使用函数 lvgl.scr_act()

载入屏幕

调用函数 lvgl.scr_load(scr) 加载屏幕。

零件 (Parts)

控件可以包含多个 Parts。例如,按钮仅具有主要部分,而滑动条则由背景,指示器和旋钮组成。

控件名称的构造类似于 lvgl. + PART 。比如 lvgl.BTN_PART_MAIN 、 lvgl.SLIDER_PART_KNOB 。 通常在将样式添加到对象时使用 Parts。使用 Parts 可以将不同的样式分配给对象的不同 Parts。

状态

对象可以处于以下状态的组合:

lvgl.STATE_DEFAULT -- 默认或正常状态

lvgl.STATE_CHECKED -- 选中或点击

lvgl.STATE_FOCUSED -- 通过键盘或编码器聚焦或通过触摸板/鼠标单击

lvgl.STATE_EDITED -- 由编码器编辑

lvgl.STATE_HOVERED -- 鼠标悬停(现在还不支持)

lvgl.STATE_PRESSED -- 按下

lvgl.STATE_DISABLED -- 禁用或无效

当用户按下,释放,聚焦等对象时,状态通常由库自动检测更改。 当然状态也可以手动检测更改。 要完全覆盖当前状态,调用 lvgl.obj_set_state(obj, part, lvgl.STATE...) 要设置或清除某个状态(但不更改其他状态),调用 lvgl.obj_add/clear_state(obj, part, lvgl.STATE_...) 可以组合使用状态值。例如: lvgl.obj_set_state(obj, part, lvgl.STATE_PRESSED)。

相关推荐
l5317981511 年前
合宙Air724UG LuatOS-Air lvgl字库
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-截屏(Screenshots)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-图片(Gif)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-二维码(Qrcode)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-标签 (Label)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-窗口 (Window)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-图片 (Image)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-表格(Table)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-开关 (Switch)
air724ug
l5317981511 年前
合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)
air724ug