LVGL官方文档-7.11.0-18-Overview-Animations

这篇博客介绍了LVGL库中的动画机制,包括如何创建、配置和启动动画。LVGL动画允许在指定时间和路径内平滑改变变量值,如对象的位置。动画可以通过设置执行回调函数、变量、持续时间、起始和结束值来定制。此外,还提到了可选的设置如延迟、路径类型(如线性、缓动等)以及重复和回弹效果。最后,讨论了如何删除动画以及如何根据速度计算动画时间。
摘要由CSDN通过智能技术生成

可以使用Animation可以在起始值和结束值之间自动改变一个变量的值。Animation通过周期性用相应值调用“animator”函数来实现。

“animator”函数的原型如下:

void func(void * var, lv_anim_var_t value);

这个原型和大部分LVGL的set函数一致,如lv_obj_set_x(obj, value)和lv_obj_set_width(obj, value)。

Create an animation

要创建动画,需要初始化一个lv_anim_t类型的变量,并且用lv_anim_set_…()函数进行配置。

/* INITIALIZE AN ANIMATION
 *-----------------------*/

lv_anim_t a;
lv_anim_init(&a);

/* MANDATORY SETTINGS
 *------------------*/

/*Set the "animator" function*/
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_obj_set_x); 

/*Set the variable to animate*/
lv_anim_set_var(&a, obj); 

/*Length of the animation [ms]*/
lv_anim_set_time(&a, duration);

/*Set start and end values. E.g. 0, 150*/
lv_anim_set_values(&a, start, end);

/* OPTIONAL SETTINGS
 *------------------*/

/*Time to wait before starting the animation [ms]*/
lv_anim_set_delay(&a, delay);

/*Set path (curve). Default is linear*/
lv_anim_set_path(&a, &path);

/*Set a callback to call when animation is ready.*/
lv_anim_set_ready_cb(&a, ready_cb);

/*Set a callback to call when animation is started (after delay).*/
lv_anim_set_start_cb(&a, start_cb);

/*Play the animation backward too with this duration. Default is 0 (disabled) [ms]*/
lv_anim_set_playback_time(&a, wait_time); 

/*Delay before playback. Default is 0 (disabled) [ms]*/
lv_anim_set_playback_delay(&a, wait_time);

/*Number of repetitions. Default is 1.  LV_ANIM_REPEAT_INFINIT for infinite repetition*/
lv_anim_set_repeat_count(&a, wait_time);

/*Delay before repeat. Default is 0 (disabled) [ms]*/
lv_anim_set_repeat_delay(&a, wait_time);

/*true (default): apply the start vale immediately, false: apply start vale after delay when then anim. really starts. */
lv_anim_set_early_apply(&a, true/false);

/* START THE ANIMATION
 *------------------*/
lv_anim_start(&a);                             /*Start the animation*/

可以同时给一个变量应用多个不同的动画。例如用Lv_obj_set_x和lv_obj_set_y来改变x和y坐标。但是对于一对变量和函数来说,只能有一个动画存在。因此,lv_anim_start()会删除已经存在的变量函数对。

Animation path

Path Of Animation是可以设置的。最简单的例子就是线性变化,代表在起始值和结束值之间是线性变化的。Path主要就是一个根据动画的当前状态计算下一个要设置的值函数。当前有下列内置的Path函数:

  • 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 在结束值会回弹一点(效果类似于撞墙)

path可以用如下的代码初始化:

lv_anim_path_t path;
lv_anim_path_init(&path);
lv_anim_path_set_cb(&path, lv_anim_path_overshoot);
lv_anim_path_set_user_data(&path, &foo); /*Optional for custom functions*/

/*Set the path in an animation*/
lv_anim_set_path(&a, &path);

Speed vs time

默认情况下,需要设置的是动画的时间,但是在某些场景下,用动画速度会更实用。

函数lv_anim_speed_to_time(speed, start, end)计算了从开始值以给定速度变化到结束值所需时间,单位毫秒。速度的单位是unit/s。例如,lv_anim_speed_to_time(20, 1, 100)的计算结果是5000毫秒。又如,如果函数是lv_obj_set_x,单位是像素,所以20的意思是20px/s。

Delete animations

可以用变量及其“animator”函数来调用lv_anim_del(var, func)以删除动画。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值