Lvgl的对象

介绍:

LVGL 中的对象(widgets)可以接收多种类型的事件,这些事件可以由用户的输入动作触发,也可以由 LVGL 自身触发。事件处理是 LVGL 中一个非常重要的部分,因为它允许开发者响应用户与界面的互动。

事件的概念

在 LVGL 中,事件是指由用户操作(如触摸或按键)或系统操作(如对象状态的变化)引发的动作。这些事件可以通过注册回调函数来捕获,并且可以用来实现复杂的用户交互逻辑。

事件类型

LVGL 支持多种类型的事件,包括但不限于:

  • Input Device Events:由输入设备触发的事件,如触摸屏或键盘。
  • Drawing Events:由对象的绘图操作触发的事件。
  • Special Events:特定于某种对象类型的事件。

常见的事件类型包括:

  • LV_EVENT_PRESSED:当对象被按下时触发。
  • LV_EVENT_RELEASED:当对象被释放时触发。
  • LV_EVENT_CLICKED:当对象被点击时触发。
  • LV_EVENT_LONG_PRESSED:当对象被长按时触发。
  • LV_EVENT_LONG_PRESSED_REPEAT:当对象被持续长按时重复触发。
  • LV_EVENT_SHORT_CLICKED:当对象被短按后立即释放时触发。
  • LV_EVENT_VALUE_CHANGED:当对象的值发生变化时触发,适用于滑动条、选择器等。
  • LV_EVENT_GESTURE:当检测到手势时触发。
  • LV_EVENT_LEAVE:当光标离开对象时触发。
  • LV_EVENT_ENTER:当光标进入对象时触发。
  • LV_EVENT_SCROLL:当对象被滚动时触发。

注册事件处理程序

为了响应这些事件,你需要为对象注册事件处理程序。这通常是通过 lv_obj_add_event_cb() 函数完成的。这个函数接受以下参数:

  • obj:要注册事件处理程序的对象。
  • cb:事件处理函数。
  • code:要响应的事件类型。
  • user_data:传递给事件处理函数的用户数据。

事件冒泡

LVGL 还支持事件冒泡机制,即如果一个子对象接收到一个事件,而它的事件处理函数没有明确阻止冒泡,那么该事件将会传播给它的父对象,直到被某个对象的事件处理函数阻止。(会单独写一篇文章进行讲解)。

API:

添加事件

void lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t event_code, const void * user_data);

obj: 指向 LVGL 对象的指针,例如按钮、标签等。

event_cb: 事件处理函数的指针,当指定事件发生时会调用此函数。

event_code: 触发事件的代码,例如 

LV_EVENT_CLICKED 或 LV_EVENT_VALUE_CHANGED

user_data: 用于存储用户数据的指针,该数据会在事件触发时传递给事件处理函数

发送事件

void lv_obj_send_event(lv_obj_t * obj, lv_event_code_t event_code, const void * user_data);

obj: 指向 LVGL 对象的指针。

event_code: 要发送的事件代码。

user_data: 用户数据指针,可以用来传递额外的信息给处理函数

删除事件

void lv_obj_remove_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t event_code);

obj: 指向 LVGL 对象的指针。

event_cb: 要移除的事件处理函数的指针。

event_code: 与事件处理函数关联的事件代码

void lv_obj_remove_event_dsc(lv_obj_t * obj, const lv_event_dsc_t * event_dsc); //event dsc是Iv obj add event cb 返回的指针

obj: 指向 LVGL 对象的指针。

event_dsc: 事件描述符的指针,这是 lv_obj_add_event_cb 返回的值,用于唯一标识一个事件处理函数。

后面查看lvgl手册,回去重新整理笔记。

总结

LVGL 的事件系统允许你为各种对象注册不同的事件处理程序,从而实现丰富的用户交互功能。通过理解不同类型的事件和如何注册处理程序,你可以创建出更加动态和响应式的用户界面。

本文是基于韦东山老师的lvgl视频进行的学习笔记,如有侵权请联系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值