各位老师好:
我的项目基于lvgl的8.3.11的库,现在使用gesture功能,尝试达到类似手机顶部栏位下滑跳出导航栏的功能。
在测试过程中发现,我将 手势下滑触发的区域设成x0=0,x1=480,y0=0,y1=80这样一个矩形区域,下滑的事件很难触发,但当我将y1设置成200,这事件就特别容易触发。请问这是什么问题?
我的代码如下:
enum pagenum
{
page_1,
page_main,
page_2
};
static void create_page1(void)
{
// 创建页面1的内容,例如按钮、标签等
page1 = lv_obj_create(NULL);
lv_obj_set_size(page1, LV_HOR_RES, LV_VER_RES);
lv_obj_t* btn1 = lv_btn_create(page1);
lv_obj_set_pos(btn1, (LV_HOR_RES - 100) / 2, (LV_VER_RES - 50) / 2);
lv_obj_set_size(btn1, 100, 50);
lv_obj_t* label1 = lv_label_create(btn1);
lv_label_set_text(label1, "Page 1");
// lv_obj_add_event_cb(btn1, page1_gesture_event_handler, LV_EVENT_ALL, NULL);
}
static void create_page2(void)
{
page2 = lv_obj_create(NULL);
lv_obj_set_size(page2, LV_HOR_RES, LV_VER_RES);
lv_obj_t* table1 = lv_table_create(page2);
lv_table_set_col_cnt(table1, 3);
lv_table_set_row_cnt(table1, 5);
lv_obj_align(table1, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* btn2 = lv_btn_create(page2);
lv_obj_set_size(btn2, 100, 50);
lv_obj_t* label2 = lv_label_create(btn2);
lv_label_set_text(label2, "Page 2");
//lv_obj_add_event_cb(btn2, page2_gesture_event_handler, LV_EVENT_ALL, NULL);
}
//lv_indev_get_point();
int mainpageflag;
#define AREA_X1 0
#define AREA_Y1 0
#define AREA_X2 600
#define AREA_Y2 120
void scr_event_cb(lv_event_t* e)
{
lv_indev_wait_release(lv_indev_get_act());// 等待触屏释放
lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());
//page = lv_event_get_user_data(obj);
//这里是获取当前鼠标点击的坐标
lv_point_t p;
lv_indev_get_point(lv_event_get_indev(e), &p);
printf("Thep.x = %d and p.y =%d ", p.x, p.y);
a
if (dir == LV_DIR_BOTTOM)//右滑
{
printf("RIGHT Dir: %d\n", dir);
rightcnt++;
printf("RIGHT Cnt: %d\n", rightcnt);
if (rightcnt > 2) rightcnt = 2;
switch (rightcnt)
{
case page_2:
if (p.x >= AREA_X1 && p.x <= AREA_X2 && p.y >= AREA_Y1 && p.y <= AREA_Y2) {
printf("Click detected within the specified area!\n");
lv_scr_load_anim(page2, LV_SCR_LOAD_ANIM_OVER_RIGHT, 300, 0, false);
}
break;
case page_main:
lv_scr_load_anim(page0, LV_SCR_LOAD_ANIM_OVER_RIGHT, 300, 0, false);
break;
default:
break;
}
}
else if (dir == 1 )//左滑
{
printf("LEFT Dir: %d\n", dir);
rightcnt--;
printf("LEFT Cnt: %d\n", rightcnt);
if (rightcnt < 0)
{
rightcnt = 0;
mainpageflag = 1;
}
switch (rightcnt)
{
case page_1:
if (mainpageflag == 1)
{
lv_scr_load_anim(lv_scr_act(), LV_SCR_LOAD_ANIM_OVER_RIGHT, 300, 0, false);
mainpageflag = 0;
}
else
{
lv_scr_load_anim(page1, LV_SCR_LOAD_ANIM_OVER_RIGHT, 300, 0, false);
}
break;
case page_main:
lv_scr_load_anim(page0, LV_SCR_LOAD_ANIM_OVER_RIGHT, 300, 0, false);
break;
default:
break;
}
}
}
void lv_gesture_demo(void)
{
page0 = lv_obj_create(NULL);
lv_obj_set_size(page0, LV_HOR_RES, LV_VER_RES);
lv_scr_load(page0);
lv_obj_t* label1 = lv_label_create(page0);
lv_label_set_text(label1, "Page 0");
create_page1();
create_page2();
lv_obj_add_event_cb(lv_scr_act(), scr_event_cb, LV_EVENT_GESTURE, NULL); //表示只在当前页面生效,切换出去得重新给那个页面也增加这个回调
lv_obj_add_event_cb(page0, scr_event_cb, LV_EVENT_GESTURE, NULL); //表示只在当前页面生效,切换出去得重新给那个页面也增加这个回调
lv_obj_add_event_cb(page1, scr_event_cb, LV_EVENT_GESTURE, NULL); //表示只在当前页面生效,切换出去得重新给那个页面也增加这个回调
lv_obj_add_event_cb(page2, scr_event_cb, LV_EVENT_GESTURE, NULL); //表示只在当前页面生效,切换出去得重新给那个页面也增加这个回调
//
//// 显示页面1
//lv_scr_load(page1);
}
祝好