创建动画
- 动画回调处理函数
static void anim_x_cb(void* var, int32_t v)
{
lv_obj_set_x(var, v); // 设置对象x坐标
}
- slider事件处理回调函数
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); //获取事件用户数据
int end;
lv_anim_path_cb_t path_cb;
if (lv_obj_has_state(sw, LV_STATE_CHECKED)) { //检查事件类型是否为CHECKED
end = 100;
path_cb = lv_anim_path_overshoot; //overshoot动画方式
}
else {
end = -lv_obj_get_width(label);
path_cb = lv_anim_path_ease_in; //ease in动画方式
}
lv_anim_t a; // 定义动画变量
lv_anim_init(&a); // 初时化动画变量
lv_anim_set_var(&a, label); //设置动画变量
lv_anim_set_values(&a, lv_obj_get_x(label), end); //设置动画变量start,end初值
lv_anim_set_time(&a, 500); //设置动画持续时间
lv_anim_set_exec_cb(&a, anim_x_cb); //设置动画执行回调函数
lv_anim_set_path_cb(&a, path_cb);//设置动画path处理方式
lv_anim_start(&a); //开始一个动画播放
}
- 创建slider控制动画播放
static void lv_example_anim_1(void)
{
lv_obj_t* label = lv_label_create(lv_scr_act()); //当前活动界面创建label对象
lv_label_set_text(label, "Hello animations!");//设置显示内容
lv_obj_set_pos(label, 100, 10); //设置label位置
lv_obj_t* sw = lv_switch_create(lv_scr_act());//当前活动界面创建switch对象
lv_obj_center(sw); //居中显示
lv_obj_add_state(sw, LV_STATE_CHECKED); //设置checked状态
lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_VALUE_CHANGED, label); //设置值发生改变后的事件
}
调用lv_example_anim_1运行效果