LVGL添加事件和删除事件
1添加事件
使用如下函数添加事件
void lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter, void * user_data)
lv_obj_t * obj
: 控件对象的指针。lv_event_cb_t event_cb
: 指向事件回调函数的指针。当指定的事件发生时,这个函数会被调用。lv_event_code_t filter
: 事件过滤器(什么事件),它指定了这个回调函数对哪些事件感兴趣。如果设置了过滤器,则只有当事件代码与过滤器匹配时,回调函数才会被调用。如果不需要过滤,可以使用LV_EVENT_ALL
,这样所有的的事件都会触发回调。void * user_data
: 用户数据指针,可以传递任何你需要的数据到事件回调函数。在回调函数中,这个指针可以通过lv_event_get_user_data()
函数获取。
有什么事件(第三个参数)
常见的事件类型:
LV_EVENT_PRESSED: 当对象被按下时触发。
LV_EVENT_PRESSING: 当对象正在被按下时重复触发。
LV_EVENT_PRESS_LOST: 当用户在按下对象后移动到对象外面时触发。
LV_EVENT_SHORT_CLICKED: 当对象被按下并快速释放时触发(通常视为点击)。
LV_EVENT_LONG_PRESSED: 当对象被长时间按下时触发。
LV_EVENT_LONG_PRESSED_REPEAT: 当对象被长时间按下并且重复触发时触发。
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: 当对象获得焦点时触发。
LV_EVENT_DEFOCUSED: 当对象失去焦点时触发。
LV_EVENT_VALUE_CHANGED: 当对象的值改变时触发(例如,滑块的值改变)。
LV_EVENT_INSERT: 当文本框中插入文本时触发。
LV_EVENT_APPLY: 当应用按钮被按下时触发。
LV_EVENT_CANCEL: 当取消按钮被按下时触发。
LV_EVENT_DELETE: 当对象被删除时触发。
LV_EVENT_REFRESH: 当对象需要刷新时触发。
LV_EVENT_SCROLL_BEGIN: 当滚动开始时触发。
LV_EVENT_SCROLL_END: 当滚动结束时触发。
LV_EVENT_SCROLL: 当对象正在滚动时触发。
LV_EVENT_SCROLL_THROW_BEGIN: 当滚动并释放后,对象开始惯性滚动时触发。
实例
//回调函数
void button_event_cb(lv_event_t * e) {
if(lv_event_get_code(e) == LV_EVENT_CLICKED) {
printf("Button was clicked!\n");
}
}
lv_obj_t * btn = lv_btn_create(lv_scr_act()); /* 创建一个按钮 */
lv_obj_add_event_cb(btn, button_event_cb, LV_EVENT_CLICKED, NULL); /* 添加事件回调 */
2删除事件
要从对象中删除事件,可以使用以下两个函数之一:
lv_obj_remove_event_cb(obj, event_cb)
:通过回调函数删除事件。lv_obj_remove_event_dsc(obj, event_dsc)
:通过事件描述符删除事件。event_dsc
是在执行lv_obj_add_event_cb
时所用的参数
方法1,移除回调函数
/* 'btn'为控件的对象 event_handler回调函数*/
lv_obj_remove_event_cb(btn, event_handler); /* 删除点击事件的回调 */
方法2,移除其创建的事件(一般上面一个就够用了)
/* 创建一个按钮 */
lv_obj_t * btn = lv_btn_create(lv_scr_act());
/* 添加事件回调,并获取事件描述符 */
lv_event_dsc_t * event_dsc = lv_obj_add_event_cb(btn, my_event_cb, LV_EVENT_CLICKED, NULL);
/* 在某个时刻,我们想要移除特定的事件描述符 */
/*btn :控件对象, event_dsc :添加事件函数的对象*/
lv_obj_remove_event_dsc(btn, event_dsc);