-
1.目标
以前手搓过LVGL多页面使用实体按键的代码,由于keypad需要使用到group将按键都绑定好,因此若将多个页面的按键都绑定在一个group上,然后按键按下使得页面切换后,lvgl仍然聚焦在之前页面的按键上,而不是聚焦到新页面的按键上,再次按下就会重复此按键的效果导致不正常,之前的做法是每次切换页面将group清空,再将新页面的按键都绑定到group中,这无疑非常麻烦。为此使用多个group来控制切换页面可以很方便,但Squareline Studio生成的代码不包含group的内容,因此需要修改一下。
-
2.Squareline Studio生成页面
先使用Squareline Studio生成两个简单的页面,再给按键加上页面切换的事件。
-
3.ESP-IDF修改代码
将Squareline Studio生成的代码丢到components中当做组件,并如下修改CMakeLists。
file(GLOB FONT_SOURCES "fonts/*.c")
file(GLOB IMAGE_SOURCES "images/*.c")
file(GLOB SCREEN_SOURCES "screens/*.c")
idf_component_register(SRCS "ui.c" "ui_helpers.c" ${FONT_SOURCES} ${IMAGE_SOURCES} ${SCREEN_SOURCES}
INCLUDE_DIRS "."
REQUIRES lvgl)
将lvgl,按键以及ui初始化完成。
接着,在ui.h中添加如下代码,分别是两个group以及一个keypad结构体。
lv_group_t *group;
lv_group_t *group1;
extern lv_indev_t *indev_keypad;
接着,在ui_Screen1_screen_init的末尾添加如下5行代码,创建group,将页面1的三个按键绑定到group,并将keypad与group绑定。
ui_Screen2_screen_init中同理,但不需要绑定keypad与group1。
最后,在ui.c生成的切换页面函数中添加切换页面后更改group的代码lv_indev_set_group即可。