1.介绍
littleVGL 是以对象为概念的,而其最核心的基础对象是 lv_obj 控件,其他的所有专用控件(比如按钮,标签,列表等)都是在此 lv_obj 对象的基础上衍生出来的,所有的控件对象都具有一些共同的属性,如下所示:
- 位置(Position)
- 大小(Size)
- 父类(Parent)
- 是否可拖拽(Drag enable)
- 是否可点击(Click enable)等等
你可以通过 lv_obj_set_…和 lv_obj_get_…这样的 API 接口对来读写这些属性。
下面我们来了解一下对象的工作机制,父对象可以被看作是其子对象的容器,每个对象只有一个父对象(screen 对象没有父对象),父对象可以有无限数量的子对象,同时父对象的类型是没有限制,父对象和子对象之间具有如下 2 点特性:
- 一起移动
如果父对象的位置更改,则子对象将随父对象一起移动,因此子对象的坐标位置是以父对象的左上角而言的,而不是以屏幕的左上角。 - 子对象只能在父对象的区域内显示
如果子对象的一部分在父对象的外面,那么子对象的这一部分将不会被显示出来。
在littleVGL中,对象可以动态的被创建和删除,每一种对象都有其专属的create创建函数,他需要 2 个参数,为 parent 和 copy 参数,创建函数看起来如下面这样:
lv_obj_t * lv_ <type>_create(lv_obj_t * parent, lv_obj_t * copy);
//parent: 父对象,如果想创建一个 screen 对象,那么请传 NULL 值
//copy: 此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来
所有对象的删除函数都是相同的,如下面所示:
void lv_obj_del(lv_obj_t * obj);
我们再来了解另外一个核心概念 Screen 屏幕对象,屏幕对象是一个特殊的对象,因为他自己没有父对象,所以它以这样的方式来创建:
lv_obj_t * screen1 = lv_obj_create(NULL, NULL);
默认情况下,littleVGL 会为显示器创建一个 lv_obj 类型的基础对象来作为它的屏幕,即最顶层的父类,可以通过 lv_scr_act()接口来获取当前活跃的屏幕对象。
2.lv_obj 的 API 接口
2.1 littleVGL 库初始化
void lv_init(void);
这个接口必须得在使用 littleVGL 之前先调用一次,我们直接放在 main 函数中调用即可。
2.2 创建对象
lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy);
参数:
parent: 指向父对象,如果传 NULL 的话,则是在创建一个 screen 屏幕。
copy: 此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来。
返回值:
返回新创建出来的对象句柄,如果为 NULL 的话,说明 littleVGL 所管理的堆空间不足了。
2.3 立即删除对象
lv_res_t lv_obj_del(lv_obj_t * obj);
参数:
obj: 需要被删除的对象。
返回值:
删除成功之后,将会返回 LV_RES_INV,其他值代表删除失败。
2.4 更换父对象
void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent);
参数:
obj: 对象句柄。
parent: 新的父对象。
更换父对象之后,它的相对位置还是保持不变的。
2.5 将对象的层级前置
void lv_obj_move_foreground(lv_obj_t * obj);
2.6 将对象的层级后置
void lv_obj_move_background(lv_obj_t * obj);
2.7 设置对象的坐标位置
void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y);
2.8 设置对象的大小
void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h);
2.9 设置对象的对齐方式
void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod,lv_coord_t y_mod);
参数:
obj: 需要进行对齐的对象
base: 与哪一个对象进行对齐,即为基准或参考对象,如果传 NULL 的话,则默认以父对象为参考
align: 对齐方式,总共有 21 种
x_mod: 指定方式对齐之后,再进行 x 轴方向的偏移修正
Y_mod: 指定方式对齐之后,再进行 y 轴方向的偏移修正
2.10 是否使能自动重新对齐
void lv_obj_set_auto_realign(lv_obj_t * obj, bool en);
参数:
obj: 对象句柄
en: true 是使能自动对齐,false 是禁止自动对齐
此接口只有在 LV_USE_OBJ_REALIGN 宏使能的前提下才有效,如果使能自动重新对齐功能后,当对象的大小发生改变时,我们就不需要去手动调用lv_obj_realign 接口来再次对齐了,因为 littleVGL 的内部已经帮我们完成了这个操作。
还有一些许多 API 接口我这里就不列出来了,通过看函数名就能知道大概啥意思了,之后用到的时候再详述。