LVGL学习——初识动画 lv_anim_t

实现效果

开关打开 左上角标签进入停止时有回弹效果 overshoot

开关关闭 标签退出速度由慢到快

几个主要函数

//   /**
// * Set the start and end values of an animation 设置动画的起始值
// * @param a         pointer to an initialized `lv_anim_t` variable
// * @param start     the start value 初始位置
// * @param end       the end value    结束位置
// */
//static inline void lv_anim_set_values(lv_anim_t * a, int32_t start, int32_t end)

 lv_anim_set_exec_cb(&a, anim_x_cb);//执行动画

//**

// * Set the path (curve) of the animation. //设置动画的路径(曲线)
// * @param a         pointer to an initialized `lv_anim_t` variable //动画对象
// * @param path_cb a function to set the current value of the animation.是设置动画当前值的函数 我理解为动画的执行效果
// */
//static inline void lv_anim_set_path_cb(lv_anim_t * a, lv_anim_path_cb_t path_cb)

动画使用

        lv_anim_t a;
        lv_anim_init(&a);
        lv_anim_set_var(&a, label);
        lv_anim_set_values(&a, lv_obj_get_x(label), -lv_obj_get_width(label));//开关关闭状态坐标(100)
        lv_anim_set_time(&a, 500);
        lv_anim_set_exec_cb(&a, anim_x_cb);
        lv_anim_set_path_cb(&a, lv_anim_path_ease_in);//ease_in 由慢到快,ease——out相反
        lv_anim_start(&a);

static void anim_x_cb(void * var, int32_t v)
{
    lv_obj_set_x(var, v);//设置对象的x坐标位置
}

源码


static void anim_x_cb(void * var, int32_t v)
{
    lv_obj_set_x(var, v);//设置对象的x坐标位置
}
static void sw_event_cb(lv_event_t * e)
{
    lv_obj_t * sw = lv_event_get_target(e);// 获取目标对象
    lv_obj_t * label = lv_event_get_user_data(e);// 获取用户传递的自定义参数
    if(lv_obj_has_state(sw, LV_STATE_CHECKED))
    {
        lv_anim_t a;
        lv_anim_init(&a);
        lv_anim_set_var(&a, label);//设置要设置动画的变量
        lv_anim_set_values(&a, lv_obj_get_x(label), 100);

//   /**
// * Set the start and end values of an animation 设置动画的起始值
// * @param a         pointer to an initialized `lv_anim_t` variable
// * @param start     the start value 初始位置
// * @param end       the end value    结束位置
// */
//static inline void lv_anim_set_values(lv_anim_t * a, int32_t start, int32_t end)

        lv_anim_set_time(&a, 500);//动画持续时间

        lv_anim_set_exec_cb(&a, anim_x_cb);
        
//**

// * Set the path (curve) of the animation. //设置动画的路径(曲线)
// * @param a         pointer to an initialized `lv_anim_t` variable //动画对象
// * @param path_cb a function to set the current value of the animation.是设置动画当前值的函数 我理解为动画的执行效果
// */
//static inline void lv_anim_set_path_cb(lv_anim_t * a, lv_anim_path_cb_t path_cb)


        lv_anim_set_path_cb(&a, lv_anim_path_overshoot);//overshoot 有个回弹效果 进入,开关打开状态
        lv_anim_start(&a);
    }
    else
    {
        lv_anim_t a;
        lv_anim_init(&a);
        lv_anim_set_var(&a, label);
        lv_anim_set_values(&a, lv_obj_get_x(label), -lv_obj_get_width(label));//开关关闭状态坐标(100)
        lv_anim_set_time(&a, 500);
        lv_anim_set_exec_cb(&a, anim_x_cb);
        lv_anim_set_path_cb(&a, lv_anim_path_ease_in);//ease_in 由慢到快,ease——out相反
        lv_anim_start(&a);
    }
}
/**
* Start animation on an event
*/
void lv_example_anim_1(void)
{
    lv_obj_t * label = lv_label_create(lv_scr_act());//在当前屏幕创建标签 -- 该实例有动画的对象
    lv_label_set_text(label, "Hello animations!");
    lv_obj_set_pos(label, 100, 10);//初始坐标(100,10)
    lv_obj_t * sw = lv_switch_create(lv_scr_act());
    lv_obj_center(sw);
    lv_obj_add_state(sw, LV_STATE_CHECKED);
    lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_VALUE_CHANGED, label);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值