概述
LVGL笔记12–event事件
在 littleVGL 中任何对象都可以注册事件,这是在新版本中才加入的特性,分为通用事件和专用事件,总共支持 20 种事件类型,这是一个总和哈,并不是指每一个对象都具有 20 种事件类型,事件可以是由 littleVGL 库自身触发的,也可以是由外部物理操作触发的,比如触摸,点击等等,当然了,我们也可以通过调用 lv_event_send 接口来手动发送事件进行触发,同时可以携带用户自定义的数据.
Events的API接口
主要数据类型
-
事件数据类型
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;
API接口函数
-
设置事件回调函数
/*------------------------------------------------------------------------------ 这个函数用来设置事件回调函数 obj: 对象句柄 event_cb: 事件回调函数 --------------------------------------------------------------------------------*/ void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb);
-
手动发送事件
/*------------------------------------------------------------------------------ 这个函数用来手动发送数据,这里需要注意 event 参数,系统是自带了 20 种事件类型,其对应的值是从 0 到 19,除了给event 参数传系统自带的事件外,其实我们还可以传用户自定义的事件的,范围为:[20,255] 参数: obj: 给哪一个对象发送事件 event: 需要发送的事件名 data: 携带的用户自定义数据 返回值: LV_RES_OK:对象没有被删除 LV_RES_INV:对象在事件中被删除了 --------------------------------------------------------------------------------*/ lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data); #define USER_EVENT_START 20 #define USER_EVENT_1 (USER_EVENT_START+1) static void btn_event_cb(lv_obj_t * obj,lv_event_t event) { if(event==USER_EVENT_1) { printf("用户自定义事件 1 被触发了rn"); } } lv_obj_t* btn1 = lv_btn_create(src, NULL); lv_obj_set_event_cb(btn1,btn_event_cb); //设置回调函数 //手动发送 USER_EVENT_1 事件,不携带参数 lv_event_send( btn1,USER_EVENT_1,NULL );
-
给任意事件回调函数手动发送事件
/*-------------------------------------------------------------------------------- 这个函数是把设置回调函数和发送事件的两步操作变成了一步,所以这个函数等价于lv_obj_set_event_cb 和 lv_event_send 这二个函数的一起调用 event_xcb: 给哪一个事件回调函数发送事件 obj: 给哪一个对象发送事件 event: 需要发送的事件名 data: 携带的用户自定义数据 返回值: LV_RES_OK:对象没有被删除 LV_RES_INV:对象在事件中被删除了 --------------------------------------------------------------------------------*/ lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, lv_event_t event,const void * data);
-
获取当前事件的用户自定义参数
/*-------------------------------------------------------------------------------- 这个函数是返回当前事件的用户数据,是当前已经触发了的事件,此API函数一般的用法是放在事件回调 函数中进行调用 返回值:返回用户自定义数据 --------------------------------------------------------------------------------*/ const void * lv_event_get_data(void); //使用实例 #define USER_EVENT_START 20 #define USER_EVENT_1 (USER_EVENT_START+1) //构建一个用户自定义数据结构体,当然了,如果你的用户数据简单,可以不用结构体 typedef struct{ char name[20]; u8 age; }USER_DATA; USER_DATA user_data = {{"xiong jia yu"},25};//初始化一下 //事件回调函数 static void btn_event_cb(lv_obj_t * obj,lv_event_t event) { USER_DATA *data; if(event==USER_EVENT_1)//当然了,这里可以是其他的任何事件, { data = (USER_DATA*) lv_event_get_data();//获取到用户的自定义数据 printf(“name:%s,age:%drn”,data ->name,data->age); } } void user_data_test(void) { lv_event_send(btn1,USER_EVENT_1,&user_data);//发送事件,同时携带用户自定义参数 }
2021–2-14–wrs
最后
以上就是勤恳自行车为你收集整理的LVGL笔记12--event事件的全部内容,希望文章能够帮你解决LVGL笔记12--event事件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复