动画效果(Animations)¶
我们可以使用动画在开始值和结束值之间自动更改变量的值。动画将通过定期调用带有相应 value 参数的 “animator” 函数来发生。
动画功能函数具有以下原型:
1 void func(void * var, lv_anim_var_t value);
该原型与 LVGL 的大多数设置功能兼容。例如 lv_obj_set_x(obj,value)
或 lv_obj_set_width(obj,value)
创建动画¶
要创建动画,必须初始化 lv_anim_t
变量,并使用 lv_anim_set _...()
函数进行配置。
1 /* 初始化动画
2 *-----------------------*/
3
4 lv_anim_t a;
5 lv_anim_init(&a);
6
7 /* 必选设置
8 *------------------*/
9
10 /* 设置“动画制作”功能 */
11 lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_obj_set_x);
12
13 /* 设置“动画制作”功能 */
14 lv_anim_set_var(&a, obj);
15
16 /* 动画时长[ms] */
17 lv_anim_set_time(&a, duration);
18
19 /* 设置开始和结束值。例如。 0、150 */
20 lv_anim_set_values(&a, start, end);
21
22 /* 可选设置
23 *------------------*/
24
25 /* 开始动画之前的等待时间[ms] */
26 lv_anim_set_delay(&a, delay);
27
28 /* 设置路径(曲线)。默认为线性 */
29 lv_anim_set_path(&a, &path);
30
31 /* 设置一个回调以在动画准备好时调用。 */
32 lv_anim_set_ready_cb(&a, ready_cb);
33
34 /* 设置在动画开始时(延迟后)调用的回调。 */
35 lv_anim_set_start_cb(&a, start_cb);
36
37 /* 在此持续时间内,也向后播放动画。默认值为0(禁用)[ms] */
38 lv_anim_set_playback_time(&a, wait_time);
39
40 /* 播放前延迟。默认值为0(禁用)[ms] */
41 lv_anim_set_playback_delay(&a, wait_time);
42
43 /* 重复次数。默认值为1。LV_ANIM_REPEAT_INFINIT用于无限重复 */
44 lv_anim_set_repeat_count(&a, wait_time);
45
46 /* 重复之前要延迟。默认值为0(禁用)[ms] */
47 lv_anim_set_repeat_delay(&a, wait_time);
48
49 /* true(默认):立即应用开始值,false:延迟设置动画后再应用开始值。真正开始。 */
50 lv_anim_set_early_apply(&a, true/false);
51
52 /* 应用动画效果
53 *------------------*/
54 lv_anim_start(&a); /* 应用动画效果 */
可以同时在同一变量上应用 多个不同的动画 。例如,用 lv_obj_set_x
和 lv_obj_set_y
设置x和y坐标的动画。但是,只有一个动画可以存在给定的变量和函数对。因此, lv_anim_start()
将删除已经存在的可变函数动画。
动画路径(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 从最终值反弹一点(就像撞墙一样)
可以这样初始化路径:
1 lv_anim_path_t path;
2 lv_anim_path_init(&path);
3 lv_anim_path_set_cb(&path, lv_anim_path_overshoot);
4 lv_anim_path_set_user_data(&path, &foo); /* 自定义数据(可选) */
5
6 /* 在动画中设置路径 */
7 lv_anim_set_path(&a, &path);
速度与时间¶
默认情况下,可以设置动画时间。但是,在某些情况下,动画速度更加实用。
lv_anim_speed_to_time(speed, start, end)
函数以毫秒为单位计算从给定速度的起始值到结束值所需的时间。速度以单位/秒为单位进行解释。例如, lv_anim_speed_to_time(20,0,100)
将给出 5000 毫秒。例如,在 lv_obj_set_x
单位为像素的情况下,因此20表示20 px / sec的速度。
删除动画¶
可以通过提供animation变量及其动画功能来删除 lv_anim_del(var,func)
的动画。
相关API¶
TODO