LVGL中,当发生用户感兴趣的事情时,可以触发回调事件,以执行相关的操作
事件(events)相关API函数:
添加事件:lv_obj_add_event_cb(obj, event_cb, event_code, user_data);
event_cb:事件回调函数
event_code:事件类型
user_data:用户数据
删除事件:lv_obj_remove_event_cb(obj, event_cb);
回调函数
static void my_event_cb(lv_event_t * e)/* 第一步:获取事件类型 */
{
lv_event_code_t code =lv_event_get_code(e);/* 第一步:获取事件类型 */
if(code==LV_EVENT_CLICKED){/* 第二步:判断事件类型 */
printf("LV_EVENT_CLICKED \n"); /* 第三步:执行相应操作 */
}
else if(code ==LV_EVENT_LONG_PRESSED)
{
printf("LV_EVENT_LONG_PRESSED\n");
}
案例程序
void my_gui(void)
{
lv_obj_t* switch1 = lv_obj_create(lv_scr_act());
lv_obj_add_event_cb(switch1,my_event_cb,LV_EVENT_CLICKED,NULL);
lv_obj_add_event_cb(switch1,my_event_cb,LV_EVENT_LONG_PRESSED,NULL);
不同的部件共用一个事件回调函数怎么处理?
#include "my_gui.h"
#include "lvgl.h"
lv_obj_t* switch1 ; //声名全局变量
lv_obj_t* switch2 ;
static void my_event_cb(lv_event_t * e) //回调
{
// lv_event_code_t code =lv_event_get_code(e);
lv_obj_t *target = lv_event_get_target(e); /* 第一步:获取触发事件的部件 */
if(target ==switch1){ /* 第二步:判断触发事件的部件 */
printf("switch1 \n"); /* 第三步:执行相应操作 */
}
else if(target ==switch2)
{
printf("switch2\n");
}
}
void my_gui(void)
{
switch1 = lv_obj_create(lv_scr_act());
lv_obj_add_event_cb(switch1,my_event_cb,LV_EVENT_CLICKED,NULL);
//lv_obj_add_event_cb(switch1,my_event_cb,LV_EVENT_LONG_PRESSED,NULL);
lv_obj_set_size(switch1,300,300);
switch2 = lv_obj_create(lv_scr_act());
lv_obj_add_event_cb(switch2,my_event_cb,LV_EVENT_LONG_PRESSED,NULL);