Important: unclear posts may not receive useful answers.
Before posting
- Get familiar with Markdown to format and structure your post
- Be sure to update lvgl from the latest version from the
master
branch.- Be sure you have checked the FAQ and read the relevant part of the documentation.
- If applicable use the Simulator to eliminate hardware related issues.
Delete this section if you read and applied the mentioned points.
Description
I have an object with multiple panels through which I can scroll horizontally (over the X axis), based on the Snapping example from the docs.
The product I’m working on will not have capacitive touch over the entire screen, but rather will have a couple of (touch) buttons.
I want to scroll through the multiple panels with two of those buttons and have it snap to the previous/next panel when I do so.
What MCU/Processor/Board and compiler are you using?
ESP32-C3 / riscv32-esp-elf-gcc
What LVGL version are you using?
v8.2
What do you want to achieve?
Scroll using buttons and snap to the previous/next snappable item.
What have you tried so far?
I have a grp_main
group connected to my button input device and a container object named panel
:
lv_obj_t* panel = lv_obj_create(scr_main);
lv_obj_set_size(panel, lv_pct(100), lv_pct(100));
lv_obj_set_scroll_snap_x(panel, LV_SCROLL_SNAP_CENTER);
lv_obj_set_flex_flow(panel, LV_FLEX_FLOW_ROW);
lv_obj_align(panel, LV_ALIGN_CENTER, 0, 0);
lv_obj_add_flag(panel, LV_OBJ_FLAG_SCROLL_ONE | LV_OBJ_FLAG_SCROLL_WITH_ARROW);
lv_group_add_obj(grp_main, panel);
To that panel
I add multiple “panes”, like so:
lv_obj_t* pane = lv_obj_create(panel);
lv_group_add_obj(grp_main, pane); // also tried it without this line
// ... add specific content for the particular pane in here ...
lv_obj_set_scroll_snap_x(pane, LV_SCROLL_SNAP_CENTER);
lv_obj_add_flag(pane, LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_CLICK_FOCUSABLE);
lv_obj_clear_flag(pane, LV_OBJ_FLAG_SCROLLABLE);
I have four buttons at the moment:
- Left
- Right
- Next (Tab)
- Enter
The display I’m working with right now does have a touch panel and if I try to scroll using a gesture on there, it snaps to the previous/next panel (with a little animation), depending on the direction I’m swiping in.
However, if I use the Left/Right buttons, it only moves a little bit, without any animation or snapping.
If I use Next followed by Enter, it does go to the next pane, but without animation (and I also don’t want to press two buttons for doing that).