LVGL中的7种动画效果

此篇文章在2022年3月2日被记录

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);`

演示图片:

img

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

posted @ 2024-12-09 15:46  shumei52  阅读(1728)  评论(0)    收藏  举报