动画对象(lv_anim_t)的应用

效果一:按钮运动

        注意:回放效果为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)中startend的步长值。

代码实现

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);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡姆图拉夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值