LVGL v8 GIF 动图(gif / gif_anim)
SiFli SDK 在 LVGL v8 上提供了 GIF 动画播放能力,由两个头文件组成:
lvsf_gif.h:基础 GIF 控件(lv_sfgif_*),提供 GIF 解码播放、封面显示、暂停/恢复、缩放等控制。lvsf_gif_anim.h:在基础控件之上封装的简易gif_anim控件(lvsf_gif_anim_*),额外提供封面图、延迟启动、显示层级和整体缩放能力。
适用于全场景动效开发。底层 lv_gif_dec_* 解码接口由控件内部调用,业务代码应使用 lv_sfgif_* / lvsf_gif_anim_* 公开接口。
功能简介
解码并播放 GIF 动画,支持封面(首帧)图片显示。
支持暂停 / 恢复播放与关闭释放资源。
支持延迟启动播放、可配置帧间隔。
gif_anim 控件支持按宽高比缩放、设置显示层级、开关背景色处理。
支持 GIF 缩放(
lv_sfgif_set_zoom,256 表示原始尺寸)。
使用场景
应用启动/加载动效、充电动画、页面背景动效。
需要先显示封面图、延时后再播放 GIF 的场景。
需要把 GIF 置于前景/背景层级的界面。
支持的开发板
通用 LVGL v8 例程支持的平台,55x 之后的开发板均可使用(如 58x、56x、52x)。
配置与初始化
基础 GIF 控件与 gif_anim 控件由 gui_widgets 组件提供,随 LVGL v8 工程编译启用:
#include "lvsf/gui_widgets/lvsf_gif.h"
#include "lvsf/gui_widgets/lvsf_gif_anim.h"
gif_anim 层级枚举(lvsf_gif_layer_t):LVSF_GIF_LAYER_DEFAULT、LVSF_GIF_LAYER_FOREGROUND、LVSF_GIF_LAYER_BACKGROUND。
API 说明
基础 GIF 控件(lvsf_gif.h)
接口函数 |
功能说明 |
参数 / 返回值说明 |
|---|---|---|
|
创建 GIF 控件实例 |
|
|
打开 GIF 资源,可同时设置封面图、位置、延迟启动与帧间隔 |
|
|
启动或恢复 GIF 播放 |
无返回值 |
|
暂停 GIF 播放,保留控件对象 |
无返回值 |
|
关闭 GIF 资源,释放内部 GIF 或封面对象 |
无返回值 |
|
设置 GIF 缩放比例 |
|
gif_anim 扩展控件(lvsf_gif_anim.h)
接口函数 |
功能说明 |
参数 / 返回值说明 |
|---|---|---|
|
创建带封面、延时播放能力的 GIF 控件 |
|
|
设置整体缩放 |
最终取宽高缩放中较小值执行整体缩放 |
|
设置显示层级 |
|
|
使能或关闭背景色处理 |
|
|
启动或恢复播放 |
无返回值 |
|
暂停播放 |
无返回值 |
|
销毁控件实例,释放资源 |
无返回值 |
典型用法
基础 GIF 控件:
lv_obj_t *bg_gif = lv_sfgif_create(lv_scr_act());
/* 打开 GIF:无封面图、位置 (0,0)、立即播放、帧间隔 50ms */
lv_sfgif_open(bg_gif,
APP_GET_gif(img_gif_demo),
NULL,
0, 0,
0,
50);
lv_obj_align(bg_gif, LV_ALIGN_CENTER, 0, 0);
lv_sfgif_resume(bg_gif);
lv_obj_move_background(bg_gif);
gif_anim 控件(带封面图与延时启动),并在页面生命周期中控制:
static lvsf_gif_anim_t *charge_gif = NULL;
static void on_start(void)
{
charge_gif = lvsf_gif_anim_init(parent,
APP_GET_gif(img_gif_demo),
APP_GET_IMG(img_gif_demo_surface),
0, 0,
LV_DISP_DEF_REFR_PERIOD * 3,
100);
}
static void on_resume(void) { lvsf_gif_anim_resume(charge_gif); }
static void on_pause(void) { lvsf_gif_anim_pause(charge_gif); }
static void on_stop(void) { lvsf_gif_anim_deinit(charge_gif); charge_gif = NULL; }
效果展示
注意事项
GIF 图像不支持透明度;如需透明效果,可使用 APNG 控件或 seqframe 序列帧控件。
基础 GIF 控件的公开入口是
lv_sfgif_*,不要直接依赖底层lv_gif_dec_*接口。页面销毁或切换时,建议调用
lv_sfgif_close()或lvsf_gif_anim_deinit()释放资源。
参考文档
源码路径:
middleware/lvgl/lvsf/gui_widgets/lvsf_gif.h、middleware/lvgl/lvsf/gui_widgets/lvsf_gif_anim.h