一、概述
1.1 object 简介
在 LVGL 中,用户界面的基本构建块是对象,即 lv_obj,其他的控件都是在其基础上衍生的,例如按钮、标签、图像、列表、图表或文本区域等。object 对象有一些共同的属性,如位置、大小、父对象、是否可拖拽、是否可点击等等,除了共同属性外,不同的控件也会有自己的专有属性。
二、object 基础知识
2.1 object 工作机制
父对象可以被看作是其子对象的容器,每个对象只有一个父对象 ( screen对象没有父对象 ),父对象可以有无限数量的子对象,同时父对象的类型没有限制,父对象和子对象之间具有如下特性:
(1)一起移动,如果父对象 的位置更改,则子对象将随父对象一起移动,因此子对象的坐标位置是以父对象的左上角而言的,而不是以屏幕的左上角。如下图所示,当改变父对象的位置之后,子对象跟随父对象一起移动。
图 1. 一起移动
(2)子对象仅在其父对象范围以内可见,如果子对象的一部分在父对象的外面,那么子对象的这一部分将不会被显示出来,如下图,橙色子对象超出父对象的部分不显示。
图 2. 子项仅在父项之内可见
2.2 object 常用状态
当用户按下、释放、聚焦等对象时,这些状态通常会被库自动改变。当然,状态也可以手动更改,可调用 lv_obj_set_state(obj, part, LV_STATE...) 完全覆盖当前状态。
- LV_STATE_DEFAULT :正常,已释放
- LV_STATE_CHECKED :切换或选中
- LV_STATE_FOCUSED :聚焦
- LV_STATE_EDITED :编码器编辑
- LV_STATE_PRESSED :已按下
- LV_STATE_DISABLED :禁用
2.3 object 之间的对齐方式
控件之间的对齐方式很多,这里不具体一一列出,下图可清晰的看到各种对齐方式的效果。
图 3. 对齐方式
2.4 object 通用事件
所有控件(如按钮/标签/滑动条等)都接收这些通用事件,而不管它们的类型,当然,除了通用事件外,有些特定类型的控件还有自己特定的事件,这里暂不介绍。
- LV_EVENT_PRESSED : 对象已按下
- LV_EVENT_SHORT_CLICKED : 短的点击
- LV_EVENT_CLICKED : 点击
- LV_EVENT_LONG_PRESSED : 长按
- LV_EVENT_LONG_PRESSED_REPEAT : 重复长按
- LV_EVENT_RELEASED : 释放
2.5 object 的保护
在库中有一些特定的操作是自动发生的,为了防止一个或多个这种行为,可以保护对象不受它们的影响,保护类型如下。
- LV_PROTECT_NONE : 没有保护
- LV_PROTECT_FOLLOW : 防止对象在自动排序时被跟随
- LV_PROTECT_PARENT : 防止自动更改父项
- LV_PROTECT_PRESS_LOST : 当按压状态滑出物体时防止失去按压
- LV_PROTECT_CLICK_FOCUS :在Group中,防止自动聚焦
- LV_PROTECT_CHILD_CHG : 禁用子改变信号,由库内部使用
LVGL 中的所用控件本质上都是 object,都有上述的通用特性,了解 object 的基础有助于我们后面了解其他控件。
三、参考资料
(1)LVGL 官方文档:
评论