LVGL给我们提供了其中动画效果,分别是:

  1. lv_anim_path_linear 线性动画
  2. lv_anim_path_step最后一步改变
  3. lv_anim_path_ease_in 开始时很慢
  4. lv_anim_path_ease_out 最后慢
  5. lv_anim_path_ease_in_out 开始和结束都很慢
  6. lv_anim_path_overshoot 超过结束值
  7. 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);

演示图片:

demo.gif

动图中的主函数(我在这里设立了三个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);//动画开始
}