lvgl手势识别无法被触发

在模拟器上学习


手势无法被鼠标触发,求大佬解答

lv_obj_t *container_set;
lv_obj_t *return_btn;
static void gesture_event_handler(lv_event_t *e)
{
    lv_obj_t *obj = lv_event_get_target(e);
    lv_event_code_t code = lv_event_get_code(e);

    if(code == LV_EVENT_GESTURE)
    {
        lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());

        switch(dir)
        {
            case LV_DIR_LEFT:
            case LV_DIR_RIGHT:
                //main_page();
                lv_obj_set_style_bg_color(container_set, lv_palette_main(LV_PALETTE_RED), 0);
                break;

            default:
                break;
        }
    }
}

static void btn_event_cb(lv_event_t *e)
{
    lv_obj_t *target = lv_event_get_target(e);

    if(target == return_btn)
    {
        lv_obj_del(container_set);
        main_page();
    }
}

void set_page(void)
{
    container_set = lv_obj_create(lv_scr_act());
    lv_obj_set_size(container_set, lv_pct(100), lv_pct(100));
    lv_obj_set_style_bg_color(container_set, lv_palette_main(LV_PALETTE_GREEN), 0);
    lv_obj_add_event_cb(container_set, gesture_event_handler, LV_EVENT_ALL, NULL);
    printf("hdfjd");
    return_btn = lv_btn_create(container_set);
    lv_obj_set_size(return_btn, lv_pct(10), lv_pct(10));
    lv_obj_align(return_btn, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
    lv_obj_add_event_cb(return_btn, btn_event_cb, LV_EVENT_CLICKED, NULL);
}

container_set 去除这个flag:

lv_obj_remove_flag(container_set, LV_OBJ_FLAG_GESTURE_BUBBLE);

否则手势事件会通过事件冒泡发送给屏幕对象,文档地址:https://lvgl.100ask.net/master/overview/indev.html#gestures

1 Like