目录
一、 概述
1、基本概念
基础对象的作用有四个:
- 管理其他部件的基本属性;
- 作为背景装饰;
- 辅助布局;
- 界面切换。
基础对象 实现了屏幕上控件的基本属性,例如:
- 坐标
- 父对象
- 基于父对象的后代
- 包含样式
- 诸如
Clickable
、Scrollable
等属性。
在面向对象的思想中,基础对象就是 LVGL 中所有其他对象都继承自的基类。
基础对象的功能可以与其他控件一起使用。 例如 lv_obj_set_width(slider, 100)
基础对象可以直接用作一个简单的控件:它只不过是一个矩形。 在 HTML 术语中,将其视为 <div>。
在设计较为复杂的 GUI 界面时,不同功能的模块之间需要清晰地划分区域,此时,我们可以使用基础对象作为背景,对不同的区域进行划分。
父对象可以被看作是其子对象的容器,每个对象只有一个父对象(screen 对象没有父对象),父对象可以有无限数量的子对象,同时父对象的类型是没有限制。父对象和子对象之间具有如下两点特性:
- 一起移动
如果父对象的位置更改,则子对象将随父对象一起移动,因此子对象的坐标位置是以父对象的左上角而言的,而不是以屏幕的左上角。 - 子对象只能在父对象的区域内显示
如果子对象的一部分在父对象的外面,那么子对象的这一部分将不会被显示出来。
2、lv_obj_t
lv_obj_t
定义在目录 lvgl\src\core\lv_obj.h
中:
struct _lv_obj_t {
const lv_obj_class_t * class_p; // 描述每个对象的通用方法
lv_obj_t * parent; // 指向父对象
_lv_obj_spec_attr_t * spec_attr; // 特殊的、很少使用的属性
_lv_obj_style_t * styles; // 样式的描述符(属性和值的集合)
#if LV_OBJ_STYLE_CACHE
uint32_t style_main_prop_is_set;
uint32_t style_other_prop_is_set;
#endif
void * user_data;
#if LV_USE_OBJ_ID
void * id;
#endif
lv_area_t coords; // 表示该对象屏幕的哪个区域
lv_obj_flag_t flags; // 为 uint32_t 类型,用来存放宏标志
lv_state_t state; // 为 uint16_t 类型,用来表示状态
uint16_t layout_inv : 1;
uint16_t readjust_scroll_after_layout : 1;
uint16_t scr_layout_inv : 1;
uint16_t skip_trans : 1;
uint16_t style_cnt : 6;
uint16_t h_layout : 1;
uint16_t w_layout : 1;
uint16_t is_deleting : 1;
}