效果一:按钮运动

        注意:回放效果为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);

}

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。