Lvgl7 基础对象(lv_obj)

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,-30

lv_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 - 启用不透明度缩放。

你可能感兴趣的:(vscode)