LVGL中的7种动画效果
LVGL给我们提供了其中动画效果,分别是:
- lv_anim_path_linear 线性动画
- lv_anim_path_step最后一步改变
- lv_anim_path_ease_in 开始时很慢
- lv_anim_path_ease_out 最后慢
- lv_anim_path_ease_in_out 开始和结束都很慢
- lv_anim_path_overshoot 超过结束值
- lv_anim_path_bounce 从最终值反弹一点(比如撞墙)
lvgl中动画如何使用:
- 新建一个动画对象:
lv_anim_t a;
- 初始化动画:
lv_anim_init(&a);
- 设置开始和结束值:
lv_anim_set_values(&a, 30, 200);
- 设置动画时长:
lv_anim_set_time(&a, 1000);
- 播放前延时(可选):
lv_anim_set_playback_delay(&a, 100);
- 向后播放动画(可选):
lv_anim_set_playback_time(&a, 1000);
- 重复前的延时(可选):
lv_anim_set_repeat_delay(&a, 1000);
- 重复次数(可选,这里是无限次重复):
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
- 设置回调函数:
lv_anim_set_exec_cb(&a, lv_obj_set_x);
- 设置路径(上述七种动画效果):
lv_anim_set_path_cb(&a, lv_anim_path_linear);
- 绑定对象:
lv_anim_set_var(&a, label);
- 动画开始:
lv_anim_start(&a);
演示图片:
动图中的主函数(我在这里设立了三个pad所以父局为tab1):
static void tab1_thing(void *var)
{
lv_obj_t *tab1=var;
lv_obj_t * label = lv_label_create(tab1);
lv_label_set_text(label, "linear");
lv_obj_align(label, LV_ALIGN_LEFT_MID, 10, -80);
lv_obj_t * labe2 = lv_label_create(tab1);
lv_label_set_text(labe2, "step");
lv_obj_align(labe2, LV_ALIGN_LEFT_MID, 10, -50);
lv_obj_t * labe3 = lv_label_create(tab1);
lv_label_set_text(labe3, "ease_in");
lv_obj_align(labe3, LV_ALIGN_LEFT_MID, 10, -20);
lv_obj_t * labe4 = lv_label_create(tab1);
lv_label_set_text(labe4, "ease_out");
lv_obj_align(labe4, LV_ALIGN_LEFT_MID, 10, 10);
lv_obj_t * labe5 = lv_label_create(tab1);
lv_label_set_text(labe5, "ease_in_out");
lv_obj_align(labe5, LV_ALIGN_LEFT_MID, 10, 40);
lv_obj_t * labe6 = lv_label_create(tab1);
lv_label_set_text(labe6, "overshoot");
lv_obj_align(labe6, LV_ALIGN_LEFT_MID, 10, 70);
lv_obj_t * labe7 = lv_label_create(tab1);
lv_label_set_text(labe7, "bounce");
lv_obj_align(labe7, LV_ALIGN_LEFT_MID, 10, 100);
lv_anim_t a;
lv_anim_init(&a);//新建动画对象并且初始化
lv_anim_set_values(&a, 30, 200);//设置开始和结束值
lv_anim_set_time(&a, 1000);//设置动画时长
lv_anim_set_playback_delay(&a, 100);//播放前延迟。默认值为0(禁用)
lv_anim_set_playback_time(&a, 1000);//在此持续时间内,也向后播放动画。默认值为0
lv_anim_set_repeat_delay(&a, 1000);//重复之前要延迟。默认值为0
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);//重复次数。默认值为1。LV_ANIM_REPEAT_INFINIT用于无限重复
lv_anim_set_exec_cb(&a, lv_obj_set_x);//设置回调函数
lv_anim_set_path_cb(&a, lv_anim_path_linear);//设置路径
lv_anim_set_var(&a, label);//将动画绑定对象
lv_anim_start(&a);//动画开始
lv_anim_set_path_cb(&a, lv_anim_path_step);//设置路径
lv_anim_set_var(&a, labe2);//将动画绑定对象
lv_anim_start(&a);//动画开始
lv_anim_set_path_cb(&a, lv_anim_path_ease_in);//设置路径
lv_anim_set_var(&a, labe3);//将动画绑定对象
lv_anim_start(&a);//动画开始
lv_anim_set_path_cb(&a, lv_anim_path_ease_out);//设置路径
lv_anim_set_var(&a, labe4);//将动画绑定对象
lv_anim_start(&a);//动画开始
lv_anim_set_path_cb(&a, lv_anim_path_ease_in_out);//设置路径
lv_anim_set_var(&a, labe5);//将动画绑定对象
lv_anim_start(&a);//动画开始
lv_anim_set_path_cb(&a, lv_anim_path_overshoot);//设置路径
lv_anim_set_var(&a, labe6);//将动画绑定对象
lv_anim_start(&a);//动画开始
lv_anim_set_path_cb(&a, lv_anim_path_bounce);//设置路径
lv_anim_set_var(&a, labe7);//将动画绑定对象
lv_anim_start(&a);//动画开始
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。