diff --git a/src/core/lv_obj_scroll.c b/src/core/lv_obj_scroll.c index 68a9ba7cc..11ca5123c 100644 --- a/src/core/lv_obj_scroll.c +++ b/src/core/lv_obj_scroll.c @@ -442,6 +442,12 @@ bool lv_obj_is_scrolling(const lv_obj_t * obj) return false; } +void lv_obj_stop_scroll_anim(const lv_obj_t * obj) +{ + lv_anim_delete((lv_obj_t *)obj, scroll_y_anim); + lv_anim_delete((lv_obj_t *)obj, scroll_x_anim); +} + void lv_obj_update_snap(lv_obj_t * obj, lv_anim_enable_t anim_en) { lv_obj_update_layout(obj); diff --git a/src/core/lv_obj_scroll.h b/src/core/lv_obj_scroll.h index 347bf5679..abe7df3b3 100644 --- a/src/core/lv_obj_scroll.h +++ b/src/core/lv_obj_scroll.h @@ -255,6 +255,13 @@ void lv_obj_scroll_to_view_recursive(lv_obj_t * obj, lv_anim_enable_t anim_en); */ bool lv_obj_is_scrolling(const lv_obj_t * obj); +/** + * Stop scrolling the current object + * + * @param obj The object being scrolled + */ +void lv_obj_stop_scroll_anim(const lv_obj_t * obj); + /** * Check children of `obj` and scroll `obj` to fulfill scroll_snap settings. * @param obj Widget whose children need to be checked and snapped diff --git a/src/indev/lv_indev.c b/src/indev/lv_indev.c index c1e58e834..63ef79ec8 100644 --- a/src/indev/lv_indev.c +++ b/src/indev/lv_indev.c @@ -1301,6 +1301,10 @@ static void indev_proc_press(lv_indev_t * indev) if(indev_act->wait_until_release) return; + if(indev->pointer.scroll_obj) { + lv_obj_stop_scroll_anim(indev->pointer.scroll_obj); + } + lv_indev_scroll_handler(indev); if(indev_reset_check(indev)) return; indev_gesture(indev);