这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
icore4tlvgl_4 [2020/12/02 16:12] zgf 创建 |
icore4tlvgl_4 [2022/04/01 11:12] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-11-16 | yang | 初次建立 | | | V1.0 | 2020-11-16 | yang | 初次建立 | | ||
行 13: | 行 12: | ||
==== 二、对象属性 ==== | ==== 二、对象属性 ==== | ||
- | * 2.1基本属性 | + | * **2.1基本属性** |
在 LVGL 中所有对象类型都共享一些基本属性: | 在 LVGL 中所有对象类型都共享一些基本属性: | ||
- | 尺寸、父对象、拖动启用、单击启用、位置 | + | **尺寸、父对象、拖动启用、单击启用、位置** |
- | 可以使用 lv_obj_set_...和 lv_obj_get_...功能设置/获取这些属性。例如: | + | 可以使用 **lv_obj_set_...**和 **lv_obj_get_...**功能设置/获取这些属性。例如: |
<code c> | <code c> | ||
/*设置基础对象属性*/ | /*设置基础对象属性*/ | ||
- | lv_obj_set_size(btn1, 100, 50); /*按键大小*/ | + | lv_obj_set_size(btn1, 100, 50); /*按键大小*/ |
lv_obj_set_pos(btn1, 20,30); /*按键位置*/ | lv_obj_set_pos(btn1, 20,30); /*按键位置*/ | ||
</code> | </code> | ||
- | * 2.2具体属性 | + | * **2.2具体属性** |
对象类型也具有特殊的属性。例如滑块具有 | 对象类型也具有特殊的属性。例如滑块具有 | ||
- | 当前值、自定义样式、最小值、最高值 | + | **当前值、自定义样式、最小值、最高值** |
对于这些属性,每种对象类型都有唯一的 API 函数。例如一个滑块: | 对于这些属性,每种对象类型都有唯一的 API 函数。例如一个滑块: | ||
<code c> | <code c> | ||
/*设置滑块的特殊属性*/ | /*设置滑块的特殊属性*/ | ||
lv_slider_set_range(slider1, 0, 100); /* 设置滑块的最小、最大值 */ | lv_slider_set_range(slider1, 0, 100); /* 设置滑块的最小、最大值 */ | ||
- | lv_slider_set_value(slider1, 40, LV_ANIM_ON); /* 设置滑块当下值的位置 */ | + | lv_slider_set_value(slider1, 40, LV_ANIM_ON); /* 设置滑块当下值的位置 */ |
- | lv_slider_set_action(slider1, my_action); /* 设置滑块的回调函数 */ | + | lv_slider_set_action(slider1, my_action); /* 设置滑块的回调函数 */ |
</code> | </code> | ||
对象类型的 API 在其文档中进行了描述,不过用户也可以查看相应的头文件(例如 lv_objx .h 或 lv_slider.h)有更详细的介绍。 | 对象类型的 API 在其文档中进行了描述,不过用户也可以查看相应的头文件(例如 lv_objx .h 或 lv_slider.h)有更详细的介绍。 | ||
行 37: | 行 36: | ||
==== 三、工作机制 ==== | ==== 三、工作机制 ==== | ||
- | * 3.1父类-子类的结构 | + | * **3.1父类-子类的结构** |
父对象可以视为其子对象的容器。每个对象只有一个父对象(屏幕除外),但是一个父对象可以有无限多个子对象。父对象的类型没有限制,但是有典型的父对象(例如按钮)和典型的子对象(例如标签)。 | 父对象可以视为其子对象的容器。每个对象只有一个父对象(屏幕除外),但是一个父对象可以有无限多个子对象。父对象的类型没有限制,但是有典型的父对象(例如按钮)和典型的子对象(例如标签)。 | ||
- | * 3.2一起移动 | + | * **3.2一起移动** |
如果更改了父类对象的位置,则子类对象将与父类对象一起移动。因此,所有位置都相对于父类。(0; 0)坐标表示对象将独立于父对象的位置保留在父对象的左上角。 | 如果更改了父类对象的位置,则子类对象将与父类对象一起移动。因此,所有位置都相对于父类。(0; 0)坐标表示对象将独立于父对象的位置保留在父对象的左上角。 | ||
{{ :icore4t:icore4t_rtt_lvgl_4_2.png?direct |}} | {{ :icore4t:icore4t_rtt_lvgl_4_2.png?direct |}} | ||
<code c> | <code c> | ||
- | lv_obj_t * par = lv_obj_create(lv_scr_act(), NULL); /*创建一个父类对象在屏幕中*/ | + | lv_obj_t * par = lv_obj_create(lv_scr_act(), NULL); /*创建一个父类对象在屏幕中*/ |
lv_obj_set_size(par, 100, 80); /*设置父类对象的位置*/ | lv_obj_set_size(par, 100, 80); /*设置父类对象的位置*/ | ||
- | lv_obj_t * obj1 = lv_obj_create(par, NULL); /*创建一个子类对象与父类对象中*/ | + | lv_obj_t * obj1 = lv_obj_create(par, NULL); /*创建一个子类对象与父类对象中*/ |
- | lv_obj_set_pos(obj1, 10, 10); /*设置子类对象的位置*/ | + | lv_obj_set_pos(obj1, 10, 10); /*设置子类对象的位置*/ |
</code> | </code> | ||
修改父类对象的位置: | 修改父类对象的位置: | ||
{{ :icore4t:icore4t_rtt_lvgl_4_3.png?direct |}} | {{ :icore4t:icore4t_rtt_lvgl_4_3.png?direct |}} | ||
<code c> | <code c> | ||
- | lv_obj_set_pos(par, 50, 50); /*移动父类对象,子类对象跟着移动.*/ | + | lv_obj_set_pos(par, 50, 50); /*移动父类对象,子类对象跟着移动.*/ |
</code> | </code> | ||
- | * 3.3仅在父类对象上可见 | + | * **3.3仅在父类对象上可见** |
如果子类对象部分或全部不在其父级之外,则看不见外面的部分。 | 如果子类对象部分或全部不在其父级之外,则看不见外面的部分。 | ||
{{ :icore4t:icore4t_rtt_lvgl_4_4.png?direct |}} | {{ :icore4t:icore4t_rtt_lvgl_4_4.png?direct |}} | ||
<code c> | <code c> | ||
- | lv_obj_set_pos(par, 50, 50); /*移动父类对象,子类对象跟着移动.*/ | + | lv_obj_set_pos(par, 50, 50); /*移动父类对象,子类对象跟着移动.*/ |
</code> | </code> | ||
- | * 3.4创建-删除对象 | + | * **3.4创建-删除对象** |
在LVGL中,可以在运行时动态创建和删除对象。这意味着仅当前创建的对象消耗 RAM。例如,如果需要图表,则可以在需要时创建它,并在不可见或不必要时将其删除。 | 在LVGL中,可以在运行时动态创建和删除对象。这意味着仅当前创建的对象消耗 RAM。例如,如果需要图表,则可以在需要时创建它,并在不可见或不必要时将其删除。 | ||
每个对象类型都有自己的带有统一原型的创建功能。它需要两个参数: | 每个对象类型都有自己的带有统一原型的创建功能。它需要两个参数: | ||
- | (1) 指向父对象的指针。要创建屏幕,请以 NULL 作为父级。 | + | |
- | (2) (可选)用于复制具有相同类型的对象的指针。该复制对象可以为 NULL,不复制操作。 | + | **(1) 指向父对象的指针。要创建屏幕,请以 NULL 作为父级。** |
- | 所有对象均以 C 语言中的 lv_obj_t 指针作为句柄进行引用。以后可以使用该指针设置或获取对象的属性。 | + | |
+ | **(2) (可选)用于复制具有相同类型的对象的指针。该复制对象可以为 NULL,不复制操作。** | ||
+ | |||
+ | 所有对象均以 C 语言中的 **lv_obj_t** 指针作为句柄进行引用。以后可以使用该指针设置或获取对象的属性。 | ||
创建函数如下所示: | 创建函数如下所示: | ||
<code c> | <code c> | ||
行 73: | 行 75: | ||
void lv_obj_del(lv_obj_t * obj); | void lv_obj_del(lv_obj_t * obj); | ||
</code> | </code> | ||
- | lv_obj_del 将立即删除该对象。如果由于任何原因无法立即删除对象,可以使用 lv_obj_del_async(obj)。这很有用,例如,如果您想在子 LV_EVENT_DELETE 信号中删除对象的父对象。 | + | **lv_obj_del** 将立即删除该对象。如果由于任何原因无法立即删除对象,可以使用 **lv_obj_del_async(obj)**。这很有用,例如,如果您想在子** LV_EVENT_DELETE** 信号中删除对象的父对象。 |
- | 您可以使用以下方法删除对象的所有子对象(但不能删除对象本身)lv_obj_clean: | + | 您可以使用以下方法删除对象的所有子对象(但不能删除对象本身)**lv_obj_clean**: |
<code c> | <code c> | ||
void lv_obj_clean(lv_obj_t * obj); | void lv_obj_clean(lv_obj_t * obj); | ||
行 80: | 行 82: | ||
==== 四、屏幕 ==== | ==== 四、屏幕 ==== | ||
- | * 4.1创建屏幕 | + | * **4.1创建屏幕** |
屏幕是没有父对象的特殊对象。因此,可以像这样创建它们: | 屏幕是没有父对象的特殊对象。因此,可以像这样创建它们: | ||
<code c> | <code c> | ||
行 86: | 行 88: | ||
</code> | </code> | ||
可以使用任何对象类型创建屏幕。例如,把基础对象或图片作为壁纸。 | 可以使用任何对象类型创建屏幕。例如,把基础对象或图片作为壁纸。 | ||
- | * 4.2获取活动屏幕 | + | * **4.2获取活动屏幕** |
- | 每个显示器上始终有一个活动屏幕。默认情况下,该库为每个显示器创建并加载一个“基础对象”作为屏幕。要获取当前活动的屏幕,请使用函数 lv_scr_act()来获取活动屏幕。 | + | 每个显示器上始终有一个活动屏幕。默认情况下,该库为每个显示器创建并加载一个“基础对象”作为屏幕。要获取当前活动的屏幕,请使用函数 **lv_scr_act()**来获取活动屏幕。 |
<code c> | <code c> | ||
- | lv_obj_t * par = lv_obj_create(lv_scr_act(), NULL);/*第一个参数为获取的当前活动屏幕*/ | + | lv_obj_t * par = lv_obj_create(lv_scr_act(), NULL); /*第一个参数为获取的当前活动屏幕*/ |
</code> | </code> | ||
- | * 4.3 加载屏幕 | + | * **4.3 加载屏幕** |
- | 要加载一个新屏幕,使用函数lv_scr_load(scr1)。 | + | 要加载一个新屏幕,使用函数**lv_scr_load(scr1)**。 |
- | * 4.4 动态切换屏幕 | + | * **4.4 动态切换屏幕** |
- | 也可以使用函数lv_scr_load_anim(scr, transition_type, time, delay, auto_del)动态切换到新屏幕。切换类型如下: | + | 也可以使用函数**lv_scr_load_anim(scr, transition_type, time, delay, auto_del)**动态切换到新屏幕。切换类型如下: |
- | * LV_SCR_LOAD_ANIM_NONE: 延时delay毫秒后立即切换 | + | * **LV_SCR_LOAD_ANIM_NONE**: 延时**delay**毫秒后立即切换 |
- | * LV_SCR_LOAD_ANIM_OVER_LEFT/RIGHT/TOP/BOTTOM新屏幕将从给定方向移入并覆盖旧屏幕 | + | * **LV_SCR_LOAD_ANIM_OVER_LEFT/RIGHT/TOP/BOTTOM** 新屏幕将从给定方向移入并覆盖旧屏幕 |
- | * LV_SCR_LOAD_ANIM_MOVE_LEFT/RIGHT/TOP/BOTTOM新屏幕将从给定方向移入,但旧屏幕不被覆盖,而是被新屏幕推出显示器 | + | * **LV_SCR_LOAD_ANIM_MOVE_LEFT/RIGHT/TOP/BOTTOM** 新屏幕将从给定方向移入,但旧屏幕不被覆盖,而是被新屏幕推出显示器 |
- | * LV_SCR_LOAD_ANIM_FADE_ON 使新屏幕淡入旧屏幕 | + | * **LV_SCR_LOAD_ANIM_FADE_ON** 使新屏幕淡入旧屏幕 |
- | 设置 auto_del 为 true 则会在动画结束时自动删除旧屏幕。在切换屏幕delay毫秒后,新屏幕将变为活动状态,此后调用函数lv_scr_act()将返回新屏幕。 | + | 设置 **auto_del** 为 **true** 则会在动画结束时自动删除旧屏幕。在切换屏幕**delay**毫秒后,新屏幕将变为活动状态,此后调用函数**lv_scr_act()**将返回新屏幕。 |
- | * 4.5 处理多个显示 | + | * **4.5 处理多个显示** |
- | 屏幕在当前选择的默认显示器上创建。默认显示器是通过lv_disp_drv_register最后注册的显示屏,你也可以使用函数lv_disp_set_default(disp)来选择新的默认显示器。 | + | 屏幕在当前选择的默认显示器上创建。默认显示器是通过**lv_disp_drv_register**最后注册的显示屏,你也可以使用函数**lv_disp_set_default(disp)**来选择新的默认显示器。 |
- | 另外函数lv_scr_act(),lv_scr_load()和lv_scr_load_anim()都在默认屏幕上进行操作。 | + | 另外函数**lv_scr_act()**,**lv_scr_load()**和**lv_scr_load_anim()**都在默认屏幕上进行操作。 |
==== 五、小部件 ==== | ==== 五、小部件 ==== | ||
- | 小部件可以包含多个部分。例如,按钮仅具有主要部分,而滑块则由背景,指示器和旋钮组成。各部分的名称构造类似LV_ + <TYPE> _PART_ <NAME>。例如LV_BTN_PART_MAIN或者LV_SLIDER_PART_KNOB。 | + | 小部件可以包含多个部分。例如,按钮仅具有主要部分,而滑块则由背景,指示器和旋钮组成。各部分的名称构造类似**LV_ + <TYPE> _PART_ <NAME>**。例如**LV_BTN_PART_MAIN**或者**LV_SLIDER_PART_KNOB**。 |
当给对象增加样式时通常会使用到小部件。使用小部件可以将不同的样式分配给对象的不同小部件。 | 当给对象增加样式时通常会使用到小部件。使用小部件可以将不同的样式分配给对象的不同小部件。 | ||
行 112: | 行 114: | ||
对象可以处于以下状态的组合: | 对象可以处于以下状态的组合: | ||
- | * LV_STATE_DEFAULT 正常,已释放 | + | * **LV_STATE_DEFAULT** 正常,已释放 |
- | * LV_STATE_CHECKED 切换或选中 | + | * **LV_STATE_CHECKED** 切换或选中 |
- | * LV_STATE_FOCUSED 通过键盘或编码器聚焦或通过触摸板/鼠标单击 | + | * **LV_STATE_FOCUSED** 通过键盘或编码器聚焦或通过触摸板/鼠标单击 |
- | * LV_STATE_EDITED 由编码器编辑 | + | * **LV_STATE_EDITED** 由编码器编辑 |
- | * LV_STATE_HOVERED 鼠标悬停(现在不支持) | + | * **LV_STATE_HOVERED** 鼠标悬停(现在不支持) |
- | * LV_STATE_PRESSED 已按下 | + | * **LV_STATE_PRESSED** 已按下 |
- | * LV_STATE_DISABLED 禁用或不活动 | + | * **LV_STATE_DISABLED** 禁用或不活动 |
- | 当用户按下,释放,聚焦等对象时,状态通常由库自动更改。但是,状态也可以手动更改。使用lv_obj_set_state(obj, part, LV_STATE...)来完全覆盖当前状态,请使用。要设置或清除给定状态(但保持其他状态不变)使用lv_obj_add/clear_state(obj, part, LV_STATE_...),在两种情况下都可以使用 ORed 状态值。例如lv_obj_set_state(obj, part, LV_STATE_PRESSED | LV_PRESSED_CHECKED)。 | + | 当用户按下,释放,聚焦等对象时,状态通常由库自动更改。但是,状态也可以手动更改。使用**lv_obj_set_state(obj, part, LV_STATE...)**来完全覆盖当前状态,请使用。要设置或清除给定状态(但保持其他状态不变)使用**lv_obj_add/clear_state(obj, part, LV_STATE_...)**,在两种情况下都可以使用 **ORed** 状态值。例如**lv_obj_set_state(obj, part, LV_STATE_PRESSED | LV_PRESSED_CHECKED)**。 |