实现效果

可是按定义的时间线播放动画

拖动进度条,定格动画进度

主要函数

时间线初始化及定义

static lv_anim_timeline_t * anim_timeline = NULL;

/* Create anim timeline */
    anim_timeline = lv_anim_timeline_create();
    lv_anim_timeline_add(anim_timeline, 0, &a1);
    lv_anim_timeline_add(anim_timeline, 0, &a2);
    lv_anim_timeline_add(anim_timeline, 200, &a3);
    lv_anim_timeline_add(anim_timeline, 200, &a4);
    lv_anim_timeline_add(anim_timeline, 400, &a5);
    lv_anim_timeline_add(anim_timeline, 400, &a6);

//没有动画时间线则创建
    if (!anim_timeline)
    {
        anim_timeline_create();
    }
    bool reverse = lv_obj_has_state(btn, LV_STATE_CHECKED);
    lv_anim_timeline_set_reverse(anim_timeline, reverse);//倒放时间线
    lv_anim_timeline_start(anim_timeline);

进度条使用

if (!anim_timeline)
    {
        anim_timeline_create();
    }
    int32_t progress = lv_slider_get_value(slider);//获取进度条当前数值
    lv_anim_timeline_set_progress(anim_timeline, progress);//设置时间线进度


//动画执行顺序
static lv_anim_timeline_t * anim_timeline = NULL;
static lv_obj_t * obj1 = NULL;
static lv_obj_t * obj2 = NULL;
static lv_obj_t * obj3 = NULL;
static const lv_coord_t obj_width = 90;
static const lv_coord_t obj_height = 70;static void set_width(void * var, int32_t v)
{lv_obj_set_width((lv_obj_t *)var, v);
}
static void set_height(void * var, int32_t v)
{lv_obj_set_height((lv_obj_t *)var, v);
}
static void anim_timeline_create(void)
{/* obj1 */lv_anim_t a1;lv_anim_init(&a1);lv_anim_set_var(&a1, obj1);lv_anim_set_values(&a1, 0, obj_width);lv_anim_set_early_apply(&a1, false);lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)set_width);lv_anim_set_path_cb(&a1, lv_anim_path_overshoot);lv_anim_set_time(&a1, 300);lv_anim_t a2;lv_anim_init(&a2);lv_anim_set_var(&a2, obj1);lv_anim_set_values(&a2, 0, obj_height);lv_anim_set_early_apply(&a2, false);lv_anim_set_exec_cb(&a2, (lv_anim_exec_xcb_t)set_height);lv_anim_set_path_cb(&a2, lv_anim_path_ease_out);lv_anim_set_time(&a2, 300);/* obj2 */lv_anim_t a3;lv_anim_init(&a3);lv_anim_set_var(&a3, obj2);lv_anim_set_values(&a3, 0, obj_width);lv_anim_set_early_apply(&a3, false);lv_anim_set_exec_cb(&a3, (lv_anim_exec_xcb_t)set_width);lv_anim_set_path_cb(&a3, lv_anim_path_overshoot);lv_anim_set_time(&a3, 300);lv_anim_t a4;lv_anim_init(&a4);lv_anim_set_var(&a4, obj2);lv_anim_set_values(&a4, 0, obj_height);lv_anim_set_early_apply(&a4, false);lv_anim_set_exec_cb(&a4, (lv_anim_exec_xcb_t)set_height);lv_anim_set_path_cb(&a4, lv_anim_path_ease_out);lv_anim_set_time(&a4, 300);/* obj3 */lv_anim_t a5;lv_anim_init(&a5);lv_anim_set_var(&a5, obj3);lv_anim_set_values(&a5, 0, obj_width);lv_anim_set_early_apply(&a5, false);lv_anim_set_exec_cb(&a5, (lv_anim_exec_xcb_t)set_width);lv_anim_set_path_cb(&a5, lv_anim_path_overshoot);lv_anim_set_time(&a5, 300);lv_anim_t a6;lv_anim_init(&a6);lv_anim_set_var(&a6, obj3);lv_anim_set_values(&a6, 0, obj_height);lv_anim_set_early_apply(&a6, false);lv_anim_set_exec_cb(&a6, (lv_anim_exec_xcb_t)set_height);lv_anim_set_path_cb(&a6, lv_anim_path_ease_out);lv_anim_set_time(&a6, 300);/* Create anim timeline */anim_timeline = lv_anim_timeline_create();lv_anim_timeline_add(anim_timeline, 0, &a1);lv_anim_timeline_add(anim_timeline, 0, &a2);lv_anim_timeline_add(anim_timeline, 200, &a3);lv_anim_timeline_add(anim_timeline, 200, &a4);lv_anim_timeline_add(anim_timeline, 400, &a5);lv_anim_timeline_add(anim_timeline, 400, &a6);
}
static void btn_start_event_handler(lv_event_t * e)
{lv_obj_t * btn = lv_event_get_target(e);//获取目标对象//没有动画时间线则创建if (!anim_timeline){anim_timeline_create();}bool reverse = lv_obj_has_state(btn, LV_STATE_CHECKED);lv_anim_timeline_set_reverse(anim_timeline, reverse);//倒放时间线lv_anim_timeline_start(anim_timeline);
}
static void btn_del_event_handler(lv_event_t * e)//删除时间线对象
{LV_UNUSED(e);if (anim_timeline){lv_anim_timeline_del(anim_timeline);anim_timeline = NULL;}
}
static void btn_stop_event_handler(lv_event_t * e)//停止执行
{LV_UNUSED(e);if (anim_timeline){lv_anim_timeline_stop(anim_timeline);}
}
static void slider_prg_event_handler(lv_event_t * e)//进度条
{lv_obj_t * slider = lv_event_get_target(e);//获取进度条对象if (!anim_timeline){anim_timeline_create();}int32_t progress = lv_slider_get_value(slider);//获取进度条当前数值lv_anim_timeline_set_progress(anim_timeline, progress);//设置时间线进度
}
/**
* Create an animation timeline
*/
void lv_example_anim_timeline_1(void)
{lv_obj_t * par = lv_scr_act();lv_obj_set_flex_flow(par, LV_FLEX_FLOW_ROW);//弹性分布 行lv_obj_set_flex_align(par, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);/**参数还不是很明白* Set how to place (where to align) the items and tracks* @param flex pointer: to a flex layout descriptor* @param main_place where to place the items on main axis (in their track). Any value of `lv_flex_align_t`.* @param cross_place where to place the item in their track on the cross axis. `LV_FLEX_ALIGN_START/END/CENTER`* @param track_place where to place the tracks in the cross direction. Any value of `lv_flex_align_t`.void lv_obj_set_flex_align(lv_obj_t * obj, lv_flex_align_t main_place, lv_flex_align_t cross_place,lv_flex_align_t track_cross_place);*/lv_obj_t * btn_start = lv_btn_create(par);//开始按钮lv_obj_add_event_cb(btn_start, btn_start_event_handler, LV_EVENT_VALUE_CHANGED , NULL);//设置回调lv_obj_add_flag(btn_start, LV_OBJ_FLAG_IGNORE_LAYOUT);lv_obj_add_flag(btn_start, LV_OBJ_FLAG_CHECKABLE);/*** Set one or more flags* @param obj   pointer to an object* @param f     R-ed values from `lv_obj_flag_t` to set.void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t f);*/lv_obj_align(btn_start, LV_ALIGN_TOP_MID, -100, 20);//设置位置上中,x左移,y下移lv_obj_t * label_start = lv_label_create(btn_start);lv_label_set_text(label_start, "Start");lv_obj_center(label_start);//文字居中/* create btn_del */lv_obj_t * btn_del = lv_btn_create(par);lv_obj_add_event_cb(btn_del, btn_del_event_handler, LV_EVENT_CLICKED, NULL);lv_obj_add_flag(btn_del, LV_OBJ_FLAG_IGNORE_LAYOUT);lv_obj_align(btn_del, LV_ALIGN_TOP_MID, 0, 20);lv_obj_t * label_del = lv_label_create(btn_del);lv_label_set_text(label_del, "Delete");lv_obj_center(label_del);/* create btn_stop */lv_obj_t * btn_stop = lv_btn_create(par);lv_obj_add_event_cb(btn_stop, btn_stop_event_handler, LV_EVENT_CLICKED, NULL);lv_obj_add_flag(btn_stop, LV_OBJ_FLAG_IGNORE_LAYOUT);lv_obj_align(btn_stop, LV_ALIGN_TOP_MID, 100, 20);lv_obj_t * label_stop = lv_label_create(btn_stop);lv_label_set_text(label_stop, "Stop");lv_obj_center(label_stop);/* create slider_prg */lv_obj_t * slider_prg = lv_slider_create(par);lv_obj_add_event_cb(slider_prg, slider_prg_event_handler, LV_EVENT_VALUE_CHANGED, NULL);lv_obj_add_flag(slider_prg, LV_OBJ_FLAG_IGNORE_LAYOUT);lv_obj_align(slider_prg, LV_ALIGN_BOTTOM_MID, 0, -20);lv_slider_set_range(slider_prg, 0, 65535);/* create 3 objects */obj1 = lv_obj_create(par);lv_obj_set_size(obj1, obj_width, obj_height);obj2 = lv_obj_create(par);lv_obj_set_size(obj2, obj_width, obj_height);obj3 = lv_obj_create(par);lv_obj_set_size(obj3, obj_width, obj_height);
}

LVGL学习——动画 时间线相关推荐

  1. LVGL学习——动画重复播放,回放

    主要函数 /** 当前进方向准备就绪时,制作要播放的动画 * Make the animation to play back to when the forward direction is read ...

  2. Vegas 使用教程(五)时间线

    原本说好的一天一篇的,由于假期在家,家里的电脑太破了,所以只能今天开始更新了. 今天来学习一下时间线,它是Vegas创作编辑的主要窗口 1.主要层级 分两部分:轨道头和轨道(时间线) 轨道类型:视频轨 ...

  3. 水平时间轴css代码_使用CSS和JavaScript构建水平时间线

    水平时间轴css代码 在上一篇文章中 ,我向您展示了如何从头开始构建响应式垂直时间轴. 今天,我将介绍创建相关的水平时间线的过程. 与往常一样,要初步了解我们将要构建的内容,请查看相关的CodePen ...

  4. C4D学习笔记2-动画-时间线及时间函数

    学习课程: https://huke88.com/course/8786.html 两种方式调出时间线 1.界面-animate 2.窗口-时间线 3.animate界面-时间函数 红框处点击可以看到 ...

  5. WPF中的动画——(三)时间线(TimeLine)

    WPF中的动画--(三)时间线(TimeLine) 原文:WPF中的动画--(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重 ...

  6. 【考研初试的准备】复习思路 + 时间线 +专业课学习及资料搜索思路

    [考研初试的准备]复习思路 + 时间线 +专业课学习及资料搜索思路 复习思路 英语(一)分值划分 阅读模块 作文模块 翻译模块 完型模块 数学(一)分值划分 政治分值划分 时间节点 ①3 - 6月 ② ...

  7. UnityEngine下Time 类的学习,时间管理器,计时器,时间线,

    Time 类用的最多的 应该就是Time.deltime; 第一次接触Time类的也是 这个属性,这个就是 上一帧的偏移量, 电脑 完成 上一帧 到现在 这一帧的时间 . 简单计时器 float Ti ...

  8. layui框架学习(10:时间线)

      时间线,英文timeline,也叫时光轴.时间轴,是指以时间为记录方式的一种网络布局形式,其形式之一为下图所示(示例图来自参考文献5).   Layui官网教程中的更新日志页面也用了时间线样式,如 ...

  9. Expression Blend学习动画基础

    原文:Expression Blend学习动画基础 什么是动画(Animation)? 动画就是时间+换面的组合,画面跟着时间变化.最常见的是flash的动画,还有GIF动态图片. 动画的主要元素 时 ...

最新文章

  1. Ext JS 4 Beta 3 今天可以下载了
  2. python基础:冒泡和选择排序算法实现
  3. 医学计算机应用第五版题库,医科医学计算机应用题库
  4. 【知了堂学习笔记】java 编写几种常见排序算法3
  5. Springboot项目修改html后不需要重启---springboot项目的热部署
  6. 实体摘要系统的解释性评测
  7. 面向小姐姐的编程——JAVA面向对象之继承(一)
  8. Mysql导出数据 (windows Linux)
  9. Mysql-slowlog
  10. 镜像下载vscode
  11. Webhacking.kr writeup(更新至challenge 29)
  12. 安装mysql数据库出现问题_安装mysql数据库及问题解决方法
  13. 前端工程师月薪上万的秘密
  14. 小程序外链,实现桌面图标、短信和邮件外链跳转到小程序的工具
  15. chromium官方文档
  16. 台式电脑出厂编号怎么查_出厂编号的查询方法
  17. 一年级课程表(3月14日-3月18日)
  18. 漏斗分析 - AARRR模型案例分析
  19. 985本科生歧视北大博导“第一学历”,“无法相信北大会有这么差的师资”
  20. mysql 慢日志可视化_Mysql 慢日志分析系统搭建 —— Box Anemometer

热门文章

  1. 关于Eclipse安装pydev成功后后pydev不显示问题
  2. SharePoint 入门书籍推荐
  3. SQL练习54:查找排除当前最大、最小salary之后的员工的平均工资avg_salary
  4. 模拟信号载波数字信息——新PCM编码
  5. 【国产虚拟仪器】国产数据采集虚拟仪器板卡结合labview的应用
  6. 破坏计算机系统什么罪,破坏计算机信息系统罪的量刑标准是什么
  7. postgresql里cmin与cmax有何不同.md
  8. 100%与100vh/100vw的区别,为什么有时候100%不生效
  9. Python Kmeans K均值分类
  10. 斗鱼扩展--notifications提示(十二)