详细的内容可以参考正点原子的LVGL开发指南,本文只记录重点内容
正点原子后续的例程都是基于操作系统来写的
面向对象
在 LVGL 中,用户界面的基本构建成分是对象,也称为小部件,例如:按钮、标签、图片、列表、图表、文本区域,等等。值得注意的是,LVGL 图形库虽然是由 C 语言开发的,但其所采用的是一种面对对象编程思维,这就涉及到了“类”的概念。
在 C语言中,并没有“类”的概念,而 LVGL通过结构体的形式实现了“类”的功能(并非真的“类”)
也就是说,每一个部件都是一个对象,我们直接针对部件对象来操作即可。
为了方便统一管理,LVGL的所有部件都会有一个父类,LVGL中,父类是属于一种最基础的基础对象。
基础对象
基础对象本身就是一个小部件,当它被创建出来之后,其呈现出一个矩形。
除此之外,基础对象还是其他小部件的父类,所有部件的位置、大小等基本属性都是归基础对象管理的。屏幕就是最顶层的一个父类(除了屏幕没有自己的父类,其他部件都有)
由上图可知,在 LVGL 中,首先定义了 lv_obj_t 这个结构体,然后通过这个结构体去实例化一个基础对象(lv_obj),这个基础对象将作为父对象,去衍生更多的子对象(其他部件)。
值得注意的是,通过这种“类”的方式去衍生其他部件,所衍生出来的部件将会继承父对象的一些基本属性,例如大小、位置、样式,等等,因此,我们可以通过一套统一的函数去管理不同部件的基本属性。
基础对象的作用有四个:
① 管理其他部件的基本属性;
② 作为背景装饰;
③ 辅助布局;
④ 界面切换。
第一个作用内容比较多,我们后面单独讨论,先说下其他三个作用
1. 作为背景装饰
当基础对象被创建出来后,它默认是一个圆角矩形,如下图所示:
在设计较为复杂的 GUI 界面时,不同功能的模块之间需要清晰地划分区域,此时,我们
可以使用基础对象作为背景,对不同的区域进行划分。
2. 辅助布局
当 GUI 界面中有一些组成内容相似的模块时,可以利用基础对象作为父对象,创建出其他的部件,这些部件将出现在基础对象内部,此时,我们只需要管理各基础对象之间的布局即可,其他的部件会随之变化。类似于编组。
3. 界面切换
当基础对象做为父对象,创建出其他的部件时,这些被创建出来的部件将出现在其父对象的内部,换言之,此时的基础对象就是一个容器,它里面子对象会随之移动。在 UI 设计中,我们可以利用上述的特性,实现界面的切换,示意图如下所示:
由上图可知,基础对象 1、2 分别用于管理界面 1、2,它们之中存在一些子对象(例如开关),当用户需要切换界面时,只需切换容器即可。
LVGL 官方提供了很多与基础对象相关 API 函数,如下表所示:
最常用的有两个
创建基础对象