LVGL 之 Object 介绍

关键字 :NXPLVGL

 一、概述

1.1 object 简介
在 LVGL 中,用户界面的基本构建块是对象,即 lv_obj,其他的控件都是在其基础上衍生的,例如按钮、标签、图像、列表、图表或文本区域等。object 对象有一些共同的属性,如位置、大小、父对象、是否可拖拽、是否可点击等等,除了共同属性外,不同的控件也会有自己的专有属性。


二、object 基础知识

2.1 object 工作机制
父对象可以被看作是其子对象的容器,每个对象只有一个父对象 ( screen对象没有父对象 ),父对象可以有无限数量的子对象,同时父对象的类型没有限制,父对象和子对象之间具有如下特性:

(1)一起移动,如果父对象 的位置更改,则子对象将随父对象一起移动,因此子对象的坐标位置是以父对象的左上角而言的,而不是以屏幕的左上角。如下图所示,当改变父对象的位置之后,子对象跟随父对象一起移动。

  

图 1. 一起移动

(2)子对象仅在其父对象范围以内可见,如果子对象的一部分在父对象的外面,那么子对象的这一部分将不会被显示出来,如下图,橙色子对象超出父对象的部分不显示。


图 2. 子项仅在父项之内可见

2.2 object 常用状态

当用户按下、释放、聚焦等对象时,这些状态通常会被库自动改变。当然,状态也可以手动更改,可调用 lv_obj_set_state(obj, part, LV_STATE...) 完全覆盖当前状态。

  • LV_STATE_DEFAULT :正常,已释放
  • LV_STATE_CHECKED :切换或选中
  • LV_STATE_FOCUSED :聚焦
  • LV_STATE_EDITED :编码器编辑
  • LV_STATE_PRESSED :已按下
  • LV_STATE_DISABLED :禁用


2.3 object 之间的对齐方式

控件之间的对齐方式很多,这里不具体一一列出,下图可清晰的看到各种对齐方式的效果。


图 3. 对齐方式


2.4 object
通用事件

所有控件(如按钮/标签/滑动条等)都接收这些通用事件,而不管它们的类型,当然,除了通用事件外,有些特定类型的控件还有自己特定的事件,这里暂不介绍。

  • LV_EVENT_PRESSED : 对象已按下
  • LV_EVENT_SHORT_CLICKED : 短的点击
  • LV_EVENT_CLICKED : 点击
  • LV_EVENT_LONG_PRESSED : 长按
  • LV_EVENT_LONG_PRESSED_REPEAT : 重复长按
  • LV_EVENT_RELEASED : 释放


2.5 object
的保护

在库中有一些特定的操作是自动发生的,为了防止一个或多个这种行为,可以保护对象不受它们的影响,保护类型如下。

  • LV_PROTECT_NONE : 没有保护
  • LV_PROTECT_FOLLOW : 防止对象在自动排序时被跟随
  • LV_PROTECT_PARENT : 防止自动更改父项
  • LV_PROTECT_PRESS_LOST : 当按压状态滑出物体时防止失去按压
  • LV_PROTECT_CLICK_FOCUS :在Group中,防止自动聚焦
  • LV_PROTECT_CHILD_CHG : 禁用子改变信号,由库内部使用

 

LVGL 中的所用控件本质上都是 object,都有上述的通用特性,了解 object 的基础有助于我们后面了解其他控件。

 

 三、参考资料

(1)LVGL 官方文档:

https://docs.lvgl.io/7.11/overview/object.html

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论