事件

## 概念 LVGL 中可触发事件,用于与用户进行交互。例如一个对应对象的事件可以有: - 被点击 - 被拖拽 - 数值被更改 - 等等 注意:多个对象可以使用同一回调函数。 ## 事件类型 ### 通用事件 所有对象(例如 Buttons / Labels / Sliders 等)都将接收这些通用事件,而不管它们的类型如何。 ### 输入设备事件 当用户按下/释放对象时发送这些消息。它们不仅用于指针,还可以用于键盘,编码器和按钮输入设备。 例如,常用的事件有: ```lua lvgl.EVENT_PRESSED -- 对象象被按下时触发,每次按下时只触发一次 lvgl.EVENT_PRESSING -- 对象正在被按下中,只要按下不放,就会一直被触发 lvgl.EVENT_CLICKED -- 对象被点击 ``` ### 指针相关事件 这些事件由类似指针的输入设备(例如鼠标或触摸板)触发 ```lua lvgl.EVENT_DRAG_BEGIN -- 开始拖动对象 lvgl.EVENT_DRAG_END -- 拖动完成 lvgl.EVENT_DRAG_THROW_BEGIN -- 拖动漂移开始时触发 ``` ### 按键事件 这些事件由键盘和编码器输入设备发送。 ```lua lvgl.EVENT_KEY -- 按下了某个按键 lvgl.EVENT_FOCUSED -- 当对象在其所在的 group 组获得焦点时触发 lvgl.EVENT_DEFOCUSED -- 当对象在其所在的 group 组失去焦点时触发 ``` ### 一般事件 LVGL库发送的其他一般事件。 ```lua lvgl.EVENT_DELETE -- 该对象正在被删除。释放相关的用户分配数据。 ``` ### 特殊事件 这些事件特定于特定的对象类型。 ```lua lvgl.EVENT_VALUE_CHANGED -- 对象值已更改(例如,对于滑动条) lvgl.EVENT_INSERT -- 有内容插入到对象中。(通常到文本区域) lvgl.EVENT_APPLY -- 单击"确定","应用"或类似的特定按钮。(通常来自键盘对象) lvgl.EVENT_CANCEL -- 单击"关闭","取消"或类似的特定按钮。(通常来自键盘对象) lvgl.EVENT_REFRESH -- 查询以刷新对象。永远不会由库发送,但可以由用户发送。 ``` 请访问特定对象类型的文档,以了解对象类型使用了哪些事件。 ### 手动发送事件 #### 任意事件 若要手动发送事件到对象,请使用 `lvgl.event_send(obj, lvgl.EVENT_..., data)` 。 #### 刷新事件 lvgl.EVENT_REFRESH 是特殊事件,因为它旨在供用户用来通知对象刷新自身。一些例子: - 通知标签根据一个或多个变量(例如当前时间)刷新其文本 - 语言更改时刷新标签 - 如果满足某些条件,请启用按钮(例如,输入正确的PIN) - 如果超出限制,则向对象添加样式/从对象删除样式等 处理类似情况的最简单方法是利用以下函数: `lvgl.event_send_refresh(obj)` 只是 `lvgl.event_send(obj, lvgl.EVENT_REFRESH, nil)` 的包装。因此,它仅向对象发送 lvgl.EVENT_REFRESH 。 `lvgl.event_send_refresh_recursive(obj)` 将 `lvgl.EVENT_REFRESH` 事件发送给对象及其所有子对象。如果将 nil 作为参数传递,则将刷新所有显示的所有对象。