littleVGL——Events 事件总结

1. 介绍

  在 littleVGL 中任何对象都可以注册事件,这是在新版本中才加入的特性,分为通用事件和专用事件,总共支持 20 种事件类型,事件可以是由 littleVGL 库自身触发的,也可以是由外部物理操作触发的,比如触摸,点击等,我们也可以通过调用 lv_event_send 接口来手动发送事件进行触发,同时可以携带用户自定义的数据。

2. Events 的 API 接口

2.1 主要数据类型

2.1.1 事件数据类型
enum {
LV_EVENT_PRESSED,//对象被按下时触发,每次按下时只触发一次
LV_EVENT_PRESSING,//对象正在被按下中,只要按下不放,就会一直被触发
LV_EVENT_PRESS_LOST,//在按下的过程中,手指从对象的可视区域划出时被触发
//在 LV_INDEV_LONG_PRESS_TIME 时间之前松手触发,如果是在被拖拽的话,则不会
//被触发
LV_EVENT_SHORT_CLICKED,
//按下时长超过 LV_INDEV_LONG_PRESS_TIME 值时触发, 只会触发一次,如果是在被
//拖拽的话,则不会被触发
LV_EVENT_LONG_PRESSED,
//在触发 LV_EVENT_LONG_PRESSED 事件之后,接下来按下的时长每超过
//LV_INDEV_LONG_PRESS_REP_TIME 值一次,就会被触发一次,如果是在被拖拽的话,
//则不会被触发
LV_EVENT_LONG_PRESSED_REPEAT,
//只要松手了就会被触发,但是如果触发了 LV_EVENT_PRESS_LOST 事件的话,那么此
//事件会被触发
LV_EVENT_CLICKED,//和 LV_EVENT_CLICKED 事件一样,没啥区别,位于LV_EVENT_CLICKED 事件之
//后触发
LV_EVENT_RELEASED,
LV_EVENT_DRAG_BEGIN,//拖拽开始时触发
LV_EVENT_DRAG_END,//拖拽结束时触发
LV_EVENT_DRAG_THROW_BEGIN,//拖拽漂移开始时触发
//当实体按键被按下时触发,我们一般都是用触摸屏作为输入,所以此事件
//一般用不到
LV_EVENT_KEY,
LV_EVENT_FOCUSED,//当对象在其所在的 group 组获得焦点时触发
LV_EVENT_DEFOCUSED,//当对象在其所在的 group 组失去焦点时触发
LV_EVENT_VALUE_CHANGED,//对象的数值改变时被触发,如 lv_slider 滑动控件
LV_EVENT_INSERT,//有东西插入到对象上时触发,如 lv_ta 文本框控件
//可以说是留给用户使用的一种事件,用户只能通过 lv_event_send 接口来手动发送
//触发此事件
LV_EVENT_REFRESH,
//点击 lv_kb 键盘控件上的” OK” , ” Apply” 等相似词义的按钮时触发
LV_EVENT_APPLY,
//点击 lv_kb 键盘控件上的” Close” , ” Cancel” 等相似词义的按钮时触发
LV_EVENT_CANCEL,
LV_EVENT_DELETE //对象被删除时触发
};
typedef uint8_t lv_event_t;
2.1.2 事件回调函数数据类型
typedef void (*lv_event_cb_t)(struct _lv_obj_t * obj, lv_event_t event);

2.2 API 接口

2.2.1 设置事件回调函数
void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb);

参数:
obj: 对象句柄
event_cb: 事件回调函数

2.2.2 手动发送事件
lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data);

参数:
obj: 给哪一个对象发送事件
event: 需要发送的事件名
data: 携带的用户自定义数据
返回值:
LV_RES_OK:对象没有被删除
LV_RES_INV:对象在事件中被删除了

  这里需要注意 event 参数,系统是自带了 20 种事件类型,其对应的值是从 0 到 19,除了给event 参数传系统自带的事件外,其实我们还可以传用户自定义的事件的,范围为:[20,255]。

2.2.3 给任意事件回调函数手动发送事件
lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, lv_event_t event,const void * data);

参数:
event_xcb: 给哪一个事件回调函数发送事件
obj: 给哪一个对象发送事件
event: 需要发送的事件名
data: 携带的用户自定义数据
返回值:
LV_RES_OK:对象没有被删除
LV_RES_INV:对象在事件中被删除了

2.2.4 获取当前事件的用户自定义参数
const void * lv_event_get_data(void);

返回值:
返回用户自定义的数据。

  请注意,这个是返回当前事件的用户数据,是当前已经被触发了的事件,此 API 接口一般的用法就是放在事件回调函数中进行调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾贾乾杯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值