效果一:按钮运动
注意:回放效果为gif生成自带的效果。
代码实现
void anim_x_cb(void *var,int32_t v)
{
lv_obj_set_x(var,v);
}
void lv_100ask_demo_course_2_1_1(void)
{
//1、创建动画并初始化
lv_anim_t a;
lv_anim_init(&a);
//2、建立回调对象
lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_align(btn,LV_ALIGN_LEFT_MID,0,0);
//3、设置回调函数及参数
lv_anim_set_exec_cb(&a,anim_x_cb);
lv_anim_set_var(&a,btn);
lv_anim_set_values(&a,50,200);
//4、设置动画时长
lv_anim_set_time(&a,1000);
//5、启动动画
lv_anim_start(&a);
}
效果二:按钮运动到终点增加弹性效果
使用lv_anim_set_path_cb接口来增加效果。
效果的实现本质上是通过控制接口lv_anim_set_values(lv_anim_t * a, int32_t start, int32_t end)中start到end的步长值。
代码实现
void anim_x_cb(void *var,int32_t v)
{
lv_obj_set_x(var,v);
}
void lv_100ask_demo_course_2_1_1(void)
{
//1、创建动画并初始化
lv_anim_t a;
lv_anim_init(&a);
//2、建立回调对象
lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_align(btn,LV_ALIGN_LEFT_MID,0,0);
//3、设置回调函数及参数
lv_anim_set_exec_cb(&a,anim_x_cb);
lv_anim_set_var(&a,btn);
lv_anim_set_values(&a,50,200);
//4、设置动画时长 + 弹性效果(overshoot)
lv_anim_set_time(&a,1000);
lv_anim_set_path_cb(&a,lv_anim_path_overshoot);
//5、启动动画
lv_anim_start(&a);
}
效果三:按钮沿x轴运动0.5s同时沿y轴运动
使用动画组(timeline)来实现,lv_anim_timeline_add接口可以选择在某个时间点进行动画播放。
0s:播放动画a,运动时长1s,到1s时结束。
0.5s:播放动画b,开始向下移动,运动时长0.5s,到1s时结束。
代码实现
void anim_x_cb(void *var,int32_t values)
{
lv_obj_set_x(var,values);
}
void anim_y_cb(void *var,int32_t values)
{
lv_obj_set_y(var,values);
}
static lv_anim_timeline_t *at;
void lv_100ask_demo_course_2_1_1(void)
{
lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_align(btn,LV_ALIGN_LEFT_MID,0,0);
//1、创建动画a
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_exec_cb(&a,anim_x_cb);
lv_anim_set_var(&a,btn);
lv_anim_set_values(&a,50,200);
lv_anim_set_time(&a,1000);
lv_anim_set_path_cb(&a,lv_anim_path_linear);
//2、创建动画b
lv_anim_t b;
lv_anim_init(&b);
lv_anim_set_exec_cb(&b,anim_y_cb);
lv_anim_set_var(&b,btn);
lv_anim_set_values(&b,50,100);
lv_anim_set_time(&b,500);
lv_anim_set_path_cb(&a,lv_anim_path_linear);
//3、添加动画组并启动
at = lv_anim_timeline_create();
lv_anim_timeline_add(at,0,&a);
lv_anim_timeline_add(at,500,&b);
lv_anim_timeline_start(at);
}