LVGL(一)对象的了解与使用

对象(lv_obj_t)

  • LVGL的基本构造快(类)是对象(实例),即部件(Widgets)

  • 对象(类):父类(基类)->子类 子类会继承父类的属性和行为

  • 对象由结构体实现(链表)

基础对象

static lv_disp_t * disp_def
屏幕
  1. 初始化显示器链表

  2. 注册显示器到链表

  3. 在显示器创建一个默认屏幕

  4. 设置屏幕的水平宽度

  5. 设置屏幕的垂直高度

屏幕层 顶层 系统层
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课。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值