ESP32 LVGL8.1 ——anim 动画 (anim 16)
提示:本博客作为学习笔记,有错误的地方希望指正
文章目录
- 一、anim 简介
- 1.1概述 Overview
- 1.2创建动画 Create an animation
- 1.3动画路径 Animation path
- 1.4速度与时间 Speed vs time
- 1.5删除动画 Delete animations
- 二、anim API
- 三、示例
- 3.1按键按下Label联动显示动画
- 3.2动画变换 在X轴由小变大
一、anim 简介
1.1概述 Overview
你可以使用动画在开始值和结束值之间自动改变变量的值。动画将通过定期调用带有相应值参数的“animator”函数来发生。
1.2创建动画 Create an animation
要创建动画,必须用lv_anim_set_…()函数初始化并配置lv_anim_t变量。你可以同时在同一个变量上应用多个不同的动画。例如,使用lv_obj_set_x和lv_obj_set_y动画x和y坐标。然而,一个给定的变量和函数对只能有一个动画。因此lv_anim_start()将删除已经存在的变量函数动画。
1.3动画路径 Animation path
你可以确定动画的路径。在最简单的情况下,它是线性的,这意味着开始和结束之间的当前值是线性变化的。路径主要是一个函数,它根据动画的当前状态计算下一个要设置的值。目前,有以下内置的路径函数:
lv_anim_path_linear //线性动画类
lv_anim_path_step //最后一步改变
lv_anim_path_ease_in //一开始很慢
lv_anim_path_ease_out //最后的速度很慢
lv_anim_path_ease_in_out //开头和结尾都很慢
lv_anim_path_overshoot //超过终点值
lv_anim_path_bounce //从最终值反弹一点(就像撞到一堵墙)
1.4速度与时间 Speed vs time
默认情况下,可以设置动画时间。但是,在某些情况下,动画速度更实用。lv_anim_speed_to_time(速度,开始,结束)函数以毫秒为单位计算从给定速度的开始值到结束值所需的时间。速度是以单位/秒为单位解释的。例如,lv_anim_speed_to_time(20,0,100)将给出5000毫秒。例如,lv_obj_set_x的单位是像素,所以20意味着20像素/秒的速度。
1.5删除动画 Delete animations
你可以通过lv_anim_del(var, func)提供动画变量和它的animator函数来删除动画。
二、anim API
void _lv_anim_core_init(void); //初始化。动画模块
void lv_anim_init(lv_anim_t * a); //初始化一个动画变量
static inline void lv_anim_set_var(lv_anim_t * a, void * var) //设置一个变量为animate
static inline void lv_anim_set_exec_cb(lv_anim_t * a, lv_anim_exec_xcb_t exec_cb) //设置一个函数来动画' var '
static inline void lv_anim_set_time(lv_anim_t * a, uint32_t duration) //设置动画的持续时间
static inline void lv_anim_set_delay(lv_anim_t * a, uint32_t delay) //在开始动画前设置一个延迟
static inline void lv_anim_set_values(lv_anim_t * a, int32_t start, int32_t end) //设置动画的开始和结束值
static inline void lv_anim_set_custom_exec_cb(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb) //*类似于' lv_anim_set_exec_cb '但' lv_anim_custom_exec_cb_t '接收' lv_anim_t * '作为它的第一个参数而不是' void * '。当LVGL被绑定到其他语言时,这个函数可能会被使用使用' lv_anim_t * '作为第一个参数更一致。
static inline void lv_anim_set_path_cb(lv_anim_t * a, lv_anim_path_cb_t path_cb) //设置动画的路径(曲线)
static inline void lv_anim_set_start_cb(lv_anim_t * a, lv_anim_start_cb_t start_cb) //设置一个函数调用时,动画真正开始(考虑' delay ')
static inline void lv_anim_set_get_value_cb(lv_anim_t * a, lv_anim_get_value_cb_t get_value_cb) //设置一个函数使用变量的当前值并设置起始值和结束值相对于返回的当前值。
static inline void lv_anim_set_ready_cb(lv_anim_t * a, lv_anim_ready_cb_t ready_cb) //当动画准备好时,设置一个函数调用
static inline void lv_anim_set_playback_time(lv_anim_t * a, uint32_t time) //回放时间,使动画回放时,正方向准备好了
static inline void lv_anim_set_playback_delay(lv_anim_t * a, uint32_t delay) //开始动画时候回放延时,使动画回放时,正向方向准备好了
static inline void lv_anim_set_repeat_count(lv_anim_t * a, uint16_t cnt) //让动画重复本身。
static inline void lv_anim_set_repeat_delay(lv_anim_t * a, uint32_t delay) //在重复动画之前设置一个延迟。
static inline void lv_anim_set_early_apply(lv_anim_t * a, bool en) //设置是否动画应该立即应用或仅当延迟过期。
static inline void lv_anim_set_user_data(lv_anim_t * a, void * user_data) //设置动画的自定义用户数据字段。
lv_anim_t * lv_anim_start(const lv_anim_t * a); //创建一个动画
static inline uint32_t lv_anim_get_delay(lv_anim_t * a) //在开始动画之前获得一个延迟
bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb); //用给定的animator函数删除一个变量的动画
void lv_anim_del_all(void); //删除所有动画动画
lv_anim_t * lv_anim_get(void * var, lv_anim_exec_xcb_t exec_cb); //获取一个变量及其exec_cb的动画。
static inline bool lv_anim_custom_del(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb) //*通过从' a '中获取动画变量来删除一个动画。只有带有exec_cb的动画才会被删除。//这个函数存在是因为它是逻辑上所有的动物。函数接收一个' lv_anim_t '作为他们的//第一个参数。这在C语言中是不实用的,但有可能API更顺位,更容易生成绑定。
static inline lv_anim_t * lv_anim_custom_get(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb) //设置动画的自定义用户数据字段获取一个变量及其exec_cb的动画。这个函数存在是因//为它是逻辑上所有的动物。函数接收一个' lv_anim_t '作为他们的第一个参数。这在//C语言中是不实用的,但有可能API更顺位,更容易生成绑定。
uint16_t lv_anim_count_running(void); //获取当前运行动画的数量
uint32_t lv_anim_speed_to_time(uint32_t speed, int32_t start, int32_t end); //计算动画的时间与给定的速度和开始和结束值
void lv_anim_refr_now(void); //手动刷新动画状态。
三、示例
3.1按键按下Label联动显示动画
/************************************************** 函数名称 : sw_event_cb* 参 数 : 无* 函数功能 : 按键回调联动显示动画*************************************************/
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); //获取在对象上注册事件时传递的user_dataif(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); //设置一个动画的开始和结束值lv_anim_set_time(&a, 500); //设置一个动画时间lv_anim_set_exec_cb(&a, anim_x_cb); //设置一个动画回调lv_anim_set_path_cb(&a, lv_anim_path_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));//设置一个动画的开始和结束值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); //设置一个动画的路径lv_anim_start(&a); //开始动画}
}
/************************************************** 函数名称 : anim_show_1* 参 数 : 无* 函数功能 : 按键联动,实现Label动画显示*************************************************/
void anim_show_1()
{lv_obj_t * label = lv_label_create(lv_scr_act()); //创建一个Labellv_label_set_text(label,"Hello animations!"); //为label设置显示内容lv_obj_set_pos(label,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); //添加回调函数
}
3.2动画变换 在X轴由小变大
/************************************************** 函数名称 : anim_x_cb* 参 数 : 无* 函数功能 : 动画x轴位置显示回调*************************************************/
static void anim_x_cb(void *var,int32_t v)
{lv_obj_set_x(var,v);
}
/************************************************** 函数名称 : anim_size_cb* 参 数 : 无* 函数功能 : 动画尺寸显示回调函数*************************************************/
static void anim_size_cb(void *var,int32_t v)
{lv_obj_set_size(var,v,v);
}
/************************************************** 函数名称 : anim_show_2* 参 数 : 无* 函数功能 : 按键联动,实现Label动画显示*************************************************/
void anim_show_2()
{lv_obj_t * obj = lv_obj_create(lv_scr_act()); //创建一个对象lv_obj_set_style_bg_color(obj,lv_palette_main(LV_PALETTE_RED),0); //设置背景颜色lv_obj_set_style_radius(obj,LV_RADIUS_CIRCLE,0); //设置样式圆角lv_obj_align(obj,LV_ALIGN_LEFT_MID,10,0); //居中样式lv_anim_t a; //创建动画样式lv_anim_init(&a); //初始化动画lv_anim_set_var(&a,obj); //给动画设置一个变量lv_anim_set_values(&a,10,50); //设置一个动画值lv_anim_set_time(&a,1000); //设置动画时间lv_anim_set_playback_delay(&a,100); //回放延时 使动画回放时,正向方向准备好了lv_anim_set_playback_time(&a,300); //回放时间lv_anim_set_repeat_delay(&a,500); //重复延时lv_anim_set_repeat_count(&a,LV_ANIM_REPEAT_INFINITE); //重复计数次数lv_anim_set_path_cb(&a,lv_anim_path_ease_in_out); //设置动画播放路径lv_anim_set_exec_cb(&a,anim_size_cb); //给动画设置一个功能 回调函数为尺寸lv_anim_start(&a); //开始动画lv_anim_set_exec_cb(&a,anim_x_cb); //给动画设置一个功能 回调函数为x轴值lv_anim_set_values(&a,10,240); //给动画设置一个值lv_anim_start(&a); //开始动画
}
ESP32 LVGL8.1 ——anim 动画 (anim 16)相关推荐
- layer的提示图标icon和动画anim数字的含义
官方文档是:信息框默认不显示图标.当你想显示图标时,默认皮肤可以传入0-6如果是加载层,可以传入0-2. layer icon对应图标 信息框(msg.alert.open.confirm) -1:不 ...
- 动画Anim插值器与估值器
动画Anim插值器与估值器 插值器Interpolator : 动画Anim是在一段时间持续执行一段操作的过程,而插值器的作用就是求出在这个过程中每一个时间点的具体值,根据动画效果的不同,同一时间计算 ...
- Monkey 导致android.anim动画线程遍历windows超时
通过查看db.fatal.00.SWT.dbg 发现 Exception Class: SWT Exception Type: system_server_watchdog Current Execu ...
- ESP32 LVGL8.1 实现太空人显示(29)
文章目录 一.ESP32 LVGL工程配置 1.1从库中下载LVGL代码 1.2配置适合ESP32 液晶屏 1.3编译下载测试 二.GIF图片处理 2.1下载gif图片 2.2将gif图片按照帧率导出 ...
- 王立平--android中的anim(动画)
简单有用步骤: 1.新建anim目录. 2.在anim下新建xml文件, 3.在xml下编写自己须要动画. 简单样例: 给Imageview加入动画 public class MainActivity ...
- android 同根动画_[转载]Android anim动画切换效果
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...
- layer的anim动画
<script>layui.use(['layer', 'jquery'], function () {var layer = layui.layer,$ = layui.jquery;$ ...
- ESP32 LVGL8.1 ——slider 滑动条 (slider 22)
提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.slider 简介 1.1概述 Overview 1.2部分和风格 Parts and Styles 1.3使用 Usage 1.3.1值 ...
- 基于 esp32 + lvgl8.0 的小电视
一个有趣的作品,转给需要的小伙伴.详情可阅读: https://gitee.com/wangpeng25/the-little-bili-tv 输入图片说明 支持功能 微信配网(完成) 时间显示(完成 ...
最新文章
- adminLTE 教程 -4 轮播控件
- 基础知识真的是九阳神功吗?
- JAVA多线程:线程创建过程以及生命周期总结
- cglib实现动态代理
- mysql数据库(9):常用查询的例子
- 作者:寇纲(1975-),男,博士,西南财经大学工商管理学院教授、博士生导师、执行院长...
- JavaScript中的类方法、对象方法、原型方法
- ionic2 问题整理汇总
- linux怎么进入优盘目录,LINUX 9.0怎么挂载U盘?
- 启动mysql5.7异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
- windows nginx 停止和启动_nginx在window与linux中启动、停止、与关闭
- python+request+Excel做接口自动化测试
- 请允许我像亲人一样去爱你
- 相机sd卡格式化后还能不能数据再恢复
- 只需三步即可将 Python 程序转换成 exe 文件
- JAVA重写和重载的区别
- ie11无法使用,卸载后无法安装,错误代码0x8000ffff
- leetcode79 word serach 解题报告
- CentOS7中安装屏幕键盘(软键盘)
- 格式化字符串漏洞例子(二)hijack GOT