一、参考
事件(Events) — LVGL_Chinese_Documents 文档https://lvgl-chinese-doc.readthedocs.io/zh-cn/latest/overview/event.html2-2-6_1_基础对象的事件(events)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Ya411r7K2/?spm_id_from=333.788.videopod.episodes&vd_source=43eb1cb50ad3175d7f3b9385905cd88f&p=12
事件类型:
/**
* Type of event being sent to the object.
*/
typedef enum {
LV_EVENT_ALL = 0,
/** Input device events*/
LV_EVENT_PRESSED, /**< The object has been pressed*/
LV_EVENT_PRESSING, /**< The object is being pressed (called continuously while pressing)*/
LV_EVENT_PRESS_LOST, /**< The object is still being pressed but slid cursor/finger off of the object */
LV_EVENT_SHORT_CLICKED, /**< The object was pressed for a short period of time, then released it. Not called if scrolled.*/
LV_EVENT_LONG_PRESSED, /**< Object has been pressed for at least `long_press_time`. Not called if scrolled.*/
LV_EVENT_LONG_PRESSED_REPEAT, /**< Called after `long_press_time` in every `long_press_repeat_time` ms. Not called if scrolled.*/
LV_EVENT_CLICKED, /**< Called on release if not scrolled (regardless to long press)*/
LV_EVENT_RELEASED, /**< Called in every cases when the object has been released*/
LV_EVENT_SCROLL_BEGIN, /**< Scrolling begins*/
LV_EVENT_SCROLL_END, /**< Scrolling ends*/
LV_EVENT_SCROLL, /**< Scrolling*/
LV_EVENT_GESTURE, /**< A gesture is detected. Get the gesture with `lv_indev_get_gesture_dir(lv_indev_get_act());` */
LV_EVENT_KEY, /**< A key is sent to the object. Get the key with `lv_indev_get_key(lv_indev_get_act());`*/
LV_EVENT_FOCUSED, /**< The object is focused*/
LV_EVENT_DEFOCUSED, /**< The object is defocused*/
LV_EVENT_LEAVE, /**< The object is defocused but still selected*/
LV_EVENT_HIT_TEST, /**< Perform advanced hit-testing*/
/** Drawing events*/
LV_EVENT_COVER_CHECK, /**< Check if the object fully covers an area. The event parameter is `lv_cover_check_info_t *`.*/
LV_EVENT_REFR_EXT_DRAW_SIZE, /**< Get the required extra draw area around the object (e.g. for shadow). The event parameter is `lv_coord_t *` to store the size.*/
LV_EVENT_DRAW_MAIN_BEGIN, /**< Starting the main drawing phase*/
LV_EVENT_DRAW_MAIN, /**< Perform the main drawing*/
LV_EVENT_DRAW_MAIN_END, /**< Finishing the main drawing phase*/
LV_EVENT_DRAW_POST_BEGIN, /**< Starting the post draw phase (when all children are drawn)*/
LV_EVENT_DRAW_POST, /**< Perform the post draw phase (when all children are drawn)*/
LV_EVENT_DRAW_POST_END, /**< Finishing the post draw phase (when all children are drawn)*/
LV_EVENT_DRAW_PART_BEGIN, /**< Starting to draw a part. The event parameter is `lv_obj_draw_dsc_t *`. */
LV_EVENT_DRAW_PART_END, /**< Finishing to draw a part. The event parameter is `lv_obj_draw_dsc_t *`. */
/** Special events*/
LV_EVENT_VALUE_CHANGED, /**< The object's value has changed (i.e. slider moved)*/
LV_EVENT_INSERT, /**< A text is inserted to the object. The event data is `char *` being inserted.*/
LV_EVENT_REFRESH, /**< Notify the object to refresh something on it (for the user)*/
LV_EVENT_READY, /**< A process has finished*/
LV_EVENT_CANCEL, /**< A process has been cancelled */
/** Other events*/
LV_EVENT_DELETE, /**< Object is being deleted*/
LV_EVENT_CHILD_CHANGED, /**< Child was removed, added, or its size, position were changed */
LV_EVENT_CHILD_CREATED, /**< Child was created, always bubbles up to all parents*/
LV_EVENT_CHILD_DELETED, /**< Child was deleted, always bubbles up to all parents*/
LV_EVENT_SCREEN_UNLOAD_START, /**< A screen unload started, fired immediately when scr_load is called*/
LV_EVENT_SCREEN_LOAD_START, /**< A screen load started, fired when the screen change delay is expired*/
LV_EVENT_SCREEN_LOADED, /**< A screen was loaded*/
LV_EVENT_SCREEN_UNLOADED, /**< A screen was unloaded*/
LV_EVENT_SIZE_CHANGED, /**< Object coordinates/size have changed*/
LV_EVENT_STYLE_CHANGED, /**< Object's style has changed*/
LV_EVENT_LAYOUT_CHANGED, /**< The children position has changed due to a layout recalculation*/
LV_EVENT_GET_SELF_SIZE, /**< Get the internal size of a widget*/
_LV_EVENT_LAST, /** Number of default events*/
LV_EVENT_PREPROCESS = 0x80, /** This is a flag that can be set with an event so it's processed
before the class default event processing */
} lv_event_code_t;
二、用codeblocks在电脑上模拟
lvgl----事件
三、关键API
lv_obj_add_event_cb //添加回调函数,第四个参数可传用户数据(一般不用)
lv_event_get_target //获取事件对象(按钮?label?....)(一般不用)
lv_obj_remove_event_cb //删除事件
lv_event_get_code //获取事件(点击?滚动?...)(最主要用这个)
四、代码
@短按计数,长按清0
/*
*按键长按短按事件
*/
#if 1
clicked_counter=0; //点击次数
lv_obj_t * label ; //全局label
static void my_button_event_cb(lv_event_t * e)
{
lv_obj_t * obj=lv_event_get_target(e); //获取事件对象
lv_event_code_t code=lv_event_get_code(e); //获取事件
switch(code)
{
case LV_EVENT_SHORT_CLICKED:clicked_counter++;printf("短按");break; //短按
case LV_EVENT_LONG_PRESSED:clicked_counter=0;printf("长按");break; //长按
default:break;
}
lv_label_set_text_fmt(label, "Value: %d", clicked_counter); //显示数据
}
void my_ui1(void)
{
label = lv_label_create(lv_scr_act()); //label创建
printf("短按+1,长按置0");
lv_obj_align(label,LV_ALIGN_CENTER, -10, 0); //居中对齐,指定参考对象
//创建btn
lv_obj_t * button = lv_btn_create(lv_scr_act());
//设置btn大小
lv_obj_set_size(button, 100, 50);
//设置对齐
lv_obj_align(button, LV_ALIGN_CENTER, 130, 0);
/*注册回调函数Assign an event callback*/
lv_obj_add_event_cb(button, my_button_event_cb, LV_EVENT_ALL , NULL);
}
#endif