正常情况下使用lv_label_set_long_mode函数并设置长文本模式(long mode)为可以LONG_SCROLL_CIRCULAR可以使字幕滚动。

例如:

    lv_obj_t *label = lv_label_create(lv_scr_act());
	lv_label_set_text(label,"1145141919810!!!");
	lv_label_set_long_mode(label,LV_LABEL_LONG_SCROLL_CIRCULAR);

以上为在stm32f103环境下运行的效果图

如果要改变速度,在其他版本的lvgl可以使用lv_label_set_anim_speed来实现,但在8.2版本中没有这个函数,可以用lv_obj_set_style_anim_speed来实现 

lv_obj_set_style_anim_speed(label,speed_zm,0);

 加入函数,其中speed_zm为滚动速度,值越大,滚动越快。 

当speed_zm为500时

那么问题来了,默认的滚动方式是向左滚动,那么向右滚动怎么设置呢?

首先跳转到lv_label_set_long_mode的函数定义

可看到字幕的滚动动画是由lv_label_refr_text这个刷新函数实现的,所以我们究其根源,再跳转过去

我们找到 if 分支语句下,在LONG_SCROLL_CIRCULAR这个模式下的语句,发现动画实现其实还是用anim实现的,所以我们找到lv_anim_set_values 这个函数

lv_anim_set_values(lv_anim_t * a, int32_t start, int32_t end);

第二个参数是起始位置,第三个是结束位置,所以如果改变方向只要左右反一下就行了

lv_anim_set_values(&a, 0,-size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT);

左滚动

lv_anim_set_values(&a,-size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT,0);

右滚动

左右滚动效果。 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐