animate:通用动画
过渡动画与通用动画的区别:
- 过渡动画只有在状态发生改变时发生,通用动画可以在任意时刻进行
- 过渡动画支是样式(style)的一部分,通用动画和样式是相互独立的
实际上,过渡的底层也使用的是动画。
创建动画
为了创建动画,需要像样式一样声明一个动画类型并初始化:
lv_anim_t anim;
lv_anim_init(&anim);
由于动画是立即执行的,因此可以使用自动变量存储。然后,需要明确该动画将作用于哪一个控件:
/*
参数1:通用动画初始化的结构体
参数2:用作动画控件的结构体指针
*/
lv_anim_set_var(&anim, obj);
接下来,可以设置动画的各种轨迹,包括:
- 动画需要改变什么的属性
- 这些属性改变的范围
- 动画效果
- 延时
- 持续时间
- 动画执行次数
- 完成动画后处理
1. 动画需要改变什么的属性
static void set_cont_main_value(void* cont, int32_t v)
{
lv_obj_set_height(cont, v);
}
lv_anim_set_exec_cb(&b, set_cont_main_value);
lv_anim_set_values(&b, 0, 60);
-
lv_anim_set_exec_cb
:参数1:动画结构体指针,参数2:回调函数
回调函数说明:
set_cont_main_value
回调函数有两个形参,参数1:是用作动画控件的结构体指针,参数2:是lv_anim_set_values
函数中参数2和参数3的范围值。 -
可以在回调函数种设置控件的尺寸、样式、位置等操作,实现各种动画效果
2. 这些属性改变的范围
lv_anim_set_values(&b, 0, 60);
- 参数1:通用动画的结构体指针
- 参数2:开始范围值
- 参数3:结束范围值
- 参数2和参数3的开始和结束范围值最终会在
lv_anim_set_exec_cb
函数参数的set_cont_main_value
回调函数的参数2:int32_t v
依次写入v
变量
3. 动画效果
/*
函数说明:加载函数动画路径(也就是动画执行效果)
参数1:通用动画的结构体指针
参数2:动画路径执行效果,具体说明看3.1
*/
lv_anim_set_path_cb(&b, lv_anim_path_ease_out);
3. 1动画效果
/**
*将初始值与终止值之间按照频次平均分割,每次赋值均匀增加,斜率k=1
*/
lv_anim_value_t lv_anim_path_linear(const lv_anim_path_t * path, const lv_anim_t * a);
/**
*在开始阶段每次赋值逐渐增加,直到到达除开始阶段外的平均速度,开始阶段斜率k=0->1,其他阶段k=1
*/
lv_anim_value_t lv_anim_path_ease_in(const lv_anim_path_t * path, const lv_anim_t * a);
/**
*在结束阶段每次赋值逐渐减小,直到减为0速,结束阶段斜率k=1->0,其他阶段k=1
*/
lv_anim_value_t lv_anim_path_ease_out(const lv_anim_path_t * path, const lv_anim_t * a);
/**
*开始阶段逐渐加速,结束阶段逐渐减速,中间阶段匀速。可理解为汽车从静止加速到刹车减速
*/
lv_anim_value_t lv_anim_path_ease_in_out(const lv_anim_path_t * path, const lv_anim_t * a);
/**
*在结束阶段会小幅超越终止值,类似于惯性缓冲
*/
lv_anim_value_t lv_anim_path_overshoot(const lv_anim_path_t * path, const lv_anim_t * a);
/**
*整个阶段为减速阶段,正向减小为0时进行反向小部分增加,反复三次。可理解为小球落地反弹运动
*/
lv_anim_value_t lv_anim_path_bounce(const lv_anim_path_t * path, const lv_anim_t * a);
/**
*规定在整个阶段共分为几段,每次都取段端点值赋值
*/
lv_anim_value_t lv_anim_path_step(const lv_anim_path_t * path, const lv_anim_t * a);
4.延时
/*
函数说明:延迟多久执行动画
参数1:通用动画的结构体指针
参数2:延迟多久执行动画
*/
lv_anim_set_delay(&b, 1000);
5.持续时间
/*
函数说明:动画持续多长时间
参数1:通用动画的结构体指针
参数2:动画持续时间
*/
lv_anim_set_time(&b, 1000)