just slide then refresh to next tab, no scroll funtion.
Does it really have to be a tabview (i.e. do you need the headers with the tab names?) or is it enough to have only the containers next to each other?
- It could be a neighboring container. Now I use the scene to make a menu. But there is a lag when turning the page because of the sliding effect.
In this case you can easily create the containers like here: Examples â LVGL documentation
And use the gestures. By getting the current scroll x
coordinate (with lv_obj_get_scoll_x)
you can figure out which one is the currently visible container and focus on the next one with lv_obj_scroll_into_view()
function.
you mean: no use âtabviewâďź create a container and put all the ICONS on it. Then set the scroll effect to turn off or use ''lv_obj_scroll_into_view()"function to refresh directly.
Maybe you misunderstood my scene. use "lv_obj_scroll_into_view()"funtion also have the scroll anim. i just need to close the anim.
Now i change the âcont_scroll_end_event_cbâ in âlv_tabview.câ, set âlv_tabview_set_act(tv, t, LV_ANIM_OFF);â, but it have a little effect. It can refresh directly when my finger is off the screen.
Iâm hope that when my finger is move in screen, the icon donât move. But the page turning when my finger is off the screen.
Here is an example (Itâs a little bit different to what I have suggested):
static void gesture_event_cb(lv_event_t * e)
{
lv_obj_t * obj = lv_event_get_target(e);
lv_dir_t d = lv_indev_get_gesture_dir(lv_indev_get_act());
int32_t *p = lv_event_get_user_data(e);
if(d == LV_DIR_LEFT) (*p)++;
if(d == LV_DIR_RIGHT) (*p)--;
*p = LV_CLAMP(0, *p, lv_obj_get_child_cnt(obj) - 1);
lv_obj_scroll_to(obj, lv_obj_get_x(lv_obj_get_child(obj, *p)), 0, LV_ANIM_OFF);
}
...
lv_obj_t * parent = lv_obj_create(lv_scr_act());
lv_obj_set_size(parent, 400, 300);
lv_obj_clear_flag(parent, LV_OBJ_FLAG_GESTURE_BUBBLE);
lv_obj_clear_flag(parent, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_ROW);
static int32_t page = 0;
lv_obj_add_event_cb(parent, gesture_event_cb, LV_EVENT_GESTURE, &page);
uint32_t i;
for(i = 0; i < 5; i++) {
lv_obj_t * cont = lv_obj_create(parent);
lv_obj_set_size(cont, lv_pct(100), lv_pct(100));
lv_obj_t * label = lv_label_create(cont);
lv_label_set_text_fmt(label, "%d", i);
}
The transplant test results were goodďźThanks a lot.
A problem has been found with this modificationďźwhen my finger slide , it will trigger clicking on the icon.
(such as i am going to turn the page now, there are ICONS where my finger is pressing down,then my finger slide and page is turning,but at the same time the imgbtn will be pressed.)
I try to change the imgbtn for "lv_obj_add_event_cb(imgbtn2, event_handler_Click, LV_EVENT_RELEASED, MODULE_WORD_DICTATION);"or other value, but thatâs not the point.
I can not speak English very well.
From what I understand, it seems that press lock should be used for the obj to which the scroll event is applied. Is that correct�
lv_obj_add_flag(obj , LV_OBJ_FLAG_PRESS_LOCK);
Maybe no, now iâm add imgbtn on the tabview widgets.
Then close scroll anim like âlv_obj_clear_flag(cont, LV_OBJ_FLAG_SCROLLABLE);â
in funtion âstatic void lv_tabview_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj)â.
My imgbtn event is âlv_obj_add_event_cb(imgbtn2, event_handler_Click, LV_EVENT_CLICKED, MODULE_WORD_DICTATION);â
The âLV_EVENT_CLICKEDâ mean â/**< Called on release if not scrolled (regardless to long press)*/â
It have conflict.