对象(lv_obj_t)
-
LVGL的基本构造快(类)是对象(实例),即部件(Widgets)
-
对象(类):父类(基类)->子类 子类会继承父类的属性和行为
-
对象由结构体实现(链表)
基础对象
static lv_disp_t * disp_def
屏幕
-
初始化显示器链表
-
注册显示器到链表
-
在显示器创建一个默认屏幕
-
设置屏幕的水平宽度
-
设置屏幕的垂直高度
屏幕层 顶层 系统层
lv_scr_act(void); //活动屏幕disp->act_scr lv_layer_top(void); //顶层 lv_layer_sys(void); //系统层
基础对象的大小(size)
/设置/// /*设置宽度*/ lv_obj_set_width(obj, new_width); /*设置高度*/ lv_obj_set_height(obj, new_height); /*同时设置宽度、高度*/ lv_obj_set_size(obj, new_width, new_height); /获取/// /*获取宽度*/ lv_obj_get_width(obj); /*获取高度*/ lv_obj_get_height(obj);
基础对象的位置(Position)
LCD坐标系
原点(0, 0)在左上角
设置坐标
/*设置X轴坐标*/ lv_obj_set_x(obj, new_x); /*设置Y轴坐标*/ lv_obj_set_y(obj, new_y); /*同时设置X、Y轴坐标*/ lv_obj_set_pos(obj, new_x, new_y);
对齐方式
/*参照父对象的对齐*/ lv_obj_set_align(obj, LV_ALIGN_..); /*参照父对象对齐后再设置坐标位置*/ lv_obj_align(obj, LV_ALIGN_.., x, y); /*参照另一个对象(无父子关系)对齐后设置坐标位置*/ lv_obj_align_to(obj_to_align, obj_referece, LV_ALIGN_.., x, y);
基础对象的盒子模型(border-box)
套盒:遵循CSS的borser-box模型---包括以下部分
-
边界(bounding):元素的宽度/高度围起来的区域(整个盒子)
-
边框(border):边框由大小和颜色等属性(相当于盒子的厚度和它的颜色)
-
填充(padding):对象两侧与其子对象之间的空间
-
内容(context):如果边界框宽度和填充的大小缩小,则显示其大小的内容区域(盒子实际装东西的区域)
-
轮廓(outline):LVGL中my外边框(margin)的概念(盒子之间的距离),确认代之的是轮廓。它是绘制于元素(盒子)周围的一条线,它不占据空间,位于边框边缘的外围,可起到突出元素(盒子)的作用。再浏览器里,当鼠标点击或使用Tab键让一个选项或者一个图片获得焦点的时候,这个元素就会多一个轮廓框围绕。
-
LVGL的盒子模型是我们理解对象(部件)的组成,修改对象的样式,实现对对象的布局、处理对象排列等等的关键。
基础对象的样式(style)
普通样式
1、static lv_style_t style_obj; 2、lv_style_init(&style_obj); 3、lv_style_set_<name>(&style, <selector>) 4、lv_style_<name>(obj, &style, <selector>);
本地样式
lv_obj_set_style_local_<property_name>(obj, <value>, <selector>);
-
本地样式优先级更高
-
指定目标部分和目标状态
-
一个样式可以给多个对象使用
-
多个样式可以分配给一个对象
-
可以定义由过渡效果的样式
事件
/*添加事件*/ lv_obj_add_event_cb(obj,event_cb,event_code,user_data); /*发送事件*/ lv_event_send(obj,event_cb,event_code,user_data); /*删除事件*/ lv_obj_remove_event_cb(obj, ); lv_obj_remove_event_dsc(obj, event_dsc);
事件类型
-
输入设备类型
-
绘图事件
-
其他事件
-
特殊事件
-
自定义事件
事件冒泡
lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE);
启用此代码,该对象所有事件都会发送改对象的父级。并且可以向上递推往上传。
可以传多个对象,实现嵌套操作
参考韦东山老师的课堂与PPT,有进一步学习LVGL的同学可以去看韦东山老师的LVGL课。