Lvgl 基础对象(lv_obj)

基础对象实现了屏幕上小部件的基本属性,例如:

  • 座标
  • 父对象
  • 子对象
  • 主要风格
  • 属性,例如点击启用、拖动启用等。

在面向对象的思想中,它是继承 LVGL 中所有其他对象的基类。这尤其有助于减少代码重复。
基础对象的功能也可以与其他小部件一起使用。例如 lv_obj_set_width(slider,100)
基础对象可以直接用作简单的小部件。然后就是矩形。

lv_obj_t * obj1 = lv_obj_create(lv_scr_act(), NULL);

坐标

尺寸

可以使用 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_set_size(obj1, 200,150);

位置

可以使用 lv_obj_set_x(obj,new_x)lv_obj_set_y(obj,new_y) 设置对象相对于父级的x和y坐标,或者同时使用lv_obj_set_pos(obj,new_x,new_y)设置相对于父级的x和y坐标。

lv_obj_set_pos(btn1, 10, 10);

对齐

可以使用 lv_obj_align(obj, obj_ref, LV_ALIGN_..., x_ofs, y_ofs) 将对象与另一个对象对齐。

  • obj – 是要对齐的对象。
  • obj_ref – 是参考对象。obj 将与其对齐。如果 obj_ref = NULL ,则将使用 obj父级
lv_obj_align(obj1, NULL, LV_ALIGN_CENTER, -50, -30);    // 对齐到父对象的中心,偏移-50,-30lv_obj_align(text1, btn1, LV_ALIGN_OUT_BOTTOM_MID,0 ,0);    // 对齐到btn1的外面下面中间

lv_obj_align_origo的操作目标是中心点,例如:

lv_obj_align_origo(btn2, obj1, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);

如果使用 lv_obj_set_auto_realign(obj, true) ,并且对象的大小在 lv_obj_set_width/height/size() 函数中更改,则对象将自动重新对齐。当将尺寸动画应用于对象并且需要保留原始位置时,这非常有用。

父子关系

先来看这一行代码:

lv_obj_t * btn1 = lv_btn_create(obj1, NULL);

意思是,在obj1上面创建一个子对象btn1
可以用lv_obj_get_parent(obj)获取obj的父对象
lv_obj_get_child(obj,child_prev)从最后到第一获取子对象
lv_obj_get_child_back(obj,child_prev)从第一到最后获取子对象

屏幕

lv_scr_act()函数提供了指向当前屏幕的指针。
如果创建了 lv_obj_t * screen = lv_obj_create(NULL,NULL) 之类的屏幕后,可以使用 lv_scr_load(screen) 加载它。
要获取对象的屏幕,请使用 lv_obj_get_screen(obj)函数。

层次

有两个自动生成的层:

  • 顶层 lv_layer_top() 就是看的见的
  • 系统层 lv_layer_sys() 例如 鼠标光标
    们独立于屏幕lv_scr_act(),并且将显示在每个屏幕上。顶层位于屏幕上每个对象的上方,而系统层也位于顶层上方。可以将任何弹出窗口自由添加到顶层。但是,系统层仅限于 系统级 的内容(例如,鼠标光标将放在 lv_indev_set_cursor() 中)。
    层级关系: lv_scr_act() < lv_layer_top() < lv_layer_sys()
    可以使用 lv_obj_move_foreground(obj)lv_obj_move_background(obj) 将对象置于前景或发送至背景。

事件处理

要为对象设置事件回调,请使用 lv_obj_set_event_cb(obj, event_cb)
要将事件手动发送到对象,请使用 lv_event_send(obj, LV_EVENT _..., data)

状态

对象可以处于以下状态的组合:

  • LV_STATE_DEFAULT 默认或正常状态
  • LV_STATE_CHECKED 选中或点击
  • LV_STATE_FOCUSED 通过键盘或编码器聚焦或通过触摸板/鼠标单击
  • V_STATE_EDITED 由编码器编辑
  • LV_STATE_PRESSED 按下
  • LV_STATE_DISABLED 禁用或无效

属性

调用 lv_obj_set_…(obj, true/false) 可以启用/禁用一些属性:

  • hidden - 隐藏对象。它不会被绘制,输入设备会将其视为不存在。它的子项也将被隐藏。
  • click - 允许通过输入设备单击对象。如果禁用,则单击事件将传递到此事件后面的对象。 (默认情况下无法点击标签)
  • top - 如果启用,则单击此对象或其任何子级时,该对象将进入前台。
  • drag - 启用拖动(通过输入设备移动)
  • drag_dir - 启用仅在特定方向上拖动。可以是LV_DRAG_DIR_HOR / VER / ALL。
  • drag_throw - 通过拖动启用“投掷”,就像对象将具有动量一样
  • drag_parent - 如果启用,则对象的父对象将在拖动过程中移动。看起来就像拖动父级。递归检查,因此也可以传播给祖父母。
  • parent_event - 也将事件传播给父母。递归检查,因此也可以传播给祖父母。
  • opa_scale_enable - 启用不透明度缩放。

Lvgl7 基础对象(lv_obj)相关推荐

  1. littleVGL学习笔记5——lv_obj 基础对象

    1.介绍   littleVGL 是以对象为概念的,而其最核心的基础对象是 lv_obj 控件,其他的所有专用控件(比如按钮,标签,列表等)都是在此 lv_obj 对象的基础上衍生出来的,所有的控件对 ...

  2. JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  3. php redis type,redis中的几种常用基础对象介绍

    一:前言 redis中有几种常用的基础对象,如string.hash.list.set.zset等,下面我们就来介绍下他们的底层实现数据结构与常见应用场景和特点. 二:redisobject 源码位置 ...

  4. JavaScript学习笔记03【基础——对象(RegExp、Global)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  5. (2)3DMAX之基础对象创建

    一.对象基本分类 从左到右依次为几何体.图形.灯光.摄影机.辅助对象.空间扭曲.系统 二.基础对象创建 首先理解透视图的栅格平面,然后正确判断创建对象的视图 有拖拽式创建和输入式创建 对基础对象属性进 ...

  6. Python的基础--对象 转

    对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识符. ...

  7. java基础—对象转型

    一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...

  8. 一天一个Java基础——对象和类

    1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象 ...

  9. Java基础----对象与类

    一.面向对象程序设计概述 面向对象程序设计(oop) 二.类 类(class)是构造对象模板或蓝图 由类构造(construct)对象的过程称为创建类的实例(instance) 封装是处理对象的一个重 ...

  10. [Java基础]对象(反)序列化流

    对象序列化流: 代码如下: package ObjectOutputStreamPack;import java.io.Serializable;public class Student implem ...

最新文章

  1. 后台服务项目的白盒测试之旅
  2. 中级程序员教程-Cache映像技术
  3. lda 可以处理中文_用python处理文本数据
  4. redis笔记_源码_简单动态字符串SDS
  5. C# JsonHelper
  6. Delphi调用Android的.so文件(转)
  7. 仿手环运动app的html,连接手环.html
  8. jQuery Mobile入门必看
  9. oracle11g arm,linux最全的需要oracle11g的rpm包
  10. 【数据结构】栈的基本操作
  11. 分布式技术核心(上)-ZookeeperDubbo
  12. L13 操作系统的这棵树
  13. 计算机毕业设计Android网约车拼车打车叫车系统APP
  14. linux下怎么识别fioa卡,UNRAID使用NVIDIA显卡(直通篇)
  15. CentOS 7 开机自启汇总
  16. [telink sig mesh] 周期Publish
  17. OSPF的NBMA环境建立邻居及排错,理论+实战讲解,干货分享
  18. 电脑计算机u盘启动不了桌面图标,电脑开机后没有桌面图标
  19. gstreamer(三) 常用命令集锦
  20. Angr 操作栈的符号执行 04_angr_symbolic_stack

热门文章

  1. Class -- 07 -- Modifier类常用方法解析
  2. 解决两台路由器串联上网问题
  3. 古风系统仙侠文推荐_不容错过仙侠文强推:文笔超好,挑灯夜读系列,看完顿觉书荒...
  4. vue学习之ElementUI时间选择器报错getTime is not a function
  5. POJ 1392 Ouroboros Snake G++ 看博友方法挺多的 dfs 没掌握
  6. 随机过程(一):泊松过程的详细理解
  7. 男女的情事为什么叫走“桃花运”
  8. 【杂七杂八】《我叫MT online》反编译解析
  9. 如何在Linux下逛B站看视频
  10. 腾讯bugly热更新开发