LVGL(lv_animimg)
文章目录
- 🧠 1. lv\_animimg 是什么?
- 🧩 2. 使用步骤概览
- ✨ 基本流程如下:
- 🎞️ 3. 示例讲解
- 🎯 示例:播放一个三帧的 PNG 动画
- 🔧 准备三张帧图:
- ⚙️ 播放动画:
- ⚙️ 4. 常用函数
- 🚩 5. 注意事项
- 🖼️ 6. 效果展示(示意)
- ✅ 7. 实用扩展
lv_animimg
是 LVGL(Light and Versatile Graphics Library) 中用于实现 图像帧动画 的对象,适合播放类似 GIF 动画或帧序列图(如 PNG 序列)的动画效果。
🧠 1. lv_animimg 是什么?
lv_animimg
是一个继承自 lv_obj
的对象,内部封装了 LVGL 的动画引擎 + 图像组件,用于 在一组图像之间循环播放。
简单来说,就是你提供一组图片,它可以按照设置好的帧率进行播放,形成动画。
🧩 2. 使用步骤概览
✨ 基本流程如下:
// 1. 创建 animimg 对象
lv_obj_t *animimg = lv_animimg_create(lv_scr_act());// 2. 设置帧图像
lv_animimg_set_src(animimg, img_dsc_array, img_num); // 图片数组 + 数量// 3. 设置播放间隔
lv_animimg_set_duration(animimg, 1000); // 总动画时长(单位 ms)
lv_animimg_set_repeat_count(animimg, LV_ANIM_REPEAT_INFINITE); // 无限重复// 4. 启动动画
lv_animimg_start(animimg);
🎞️ 3. 示例讲解
🎯 示例:播放一个三帧的 PNG 动画
🔧 准备三张帧图:
LV_IMG_DECLARE(frame_1);
LV_IMG_DECLARE(frame_2);
LV_IMG_DECLARE(frame_3);
⚙️ 播放动画:
static const lv_img_dsc_t *frames[] = {&frame_1,&frame_2,&frame_3,
};lv_obj_t *animimg = lv_animimg_create(lv_scr_act());
lv_animimg_set_src(animimg, frames, 3); // 设置帧和数量
lv_animimg_set_duration(animimg, 900); // 一次播放用时 900 ms
lv_animimg_set_repeat_count(animimg, LV_ANIM_REPEAT_INFINITE); // 无限循环
lv_animimg_start(animimg); // 启动播放
⚙️ 4. 常用函数
函数 | 功能 |
---|---|
lv_animimg_create(parent) | 创建动画对象 |
lv_animimg_set_src(obj, img_dsc[], count) | 设置帧图片数组和数量 |
lv_animimg_set_duration(obj, time_ms) | 设置一次播放的总时长 |
lv_animimg_set_repeat_count(obj, n) | 设置重复次数(或 LV_ANIM_REPEAT_INFINITE) |
lv_animimg_start(obj) | 开始动画播放 |
lv_animimg_stop(obj) | 停止动画播放 |
lv_animimg_set_playback_delay(obj, ms) | 播放完后延时多久倒放(可选) |
lv_animimg_set_playback_time(obj, ms) | 设置倒放总时间(可选) |
🚩 5. 注意事项
- 所有帧图片应 大小一致,否则播放可能出现闪烁。
- 图片格式要用
lv_img_dsc_t
类型声明(支持使用LV_IMG_DECLARE()
宏)。 - 动画是通过
lv_timer
控制的,确保 LVGL 的 tick 正常工作。 - 图片数组生命周期要长于
animimg
对象。
🖼️ 6. 效果展示(示意)
比如播放三帧的一个加载圈:
[🔁frame_1] → [🔁frame_2] → [🔁frame_3] → ...
视觉上就形成了流畅的帧动画。
✅ 7. 实用扩展
你可以使用 LVGL 的图像转换工具(lv_img_conv
或 image converter online
)将 PNG/JPEG 批量转换为 C
源码帧数组,然后塞给 lv_animimg
实现高效动画播放。