gif控件¶
1. 使用场景¶
控件基于 LVGL 开发,是 solution/framework/gui_widget 中封装的 GIF 动画播放控件,提供 GIF 动画解码播放、封面显示、延迟启动、暂停/恢复、缩放等控制能力,适用于全场景动效开发。
2. 接口介绍¶
2.1 基础功能¶
gui_widget 对外公开的基础 GIF 控件接口定义在 solution/framework/gui_widget/include/lvsf_gif.h,接口名为 lv_sfgif_*。底层 lv_gif_dec_* 解码接口由该控件内部调用,不作为本控件文档的直接使用入口。
接口函数 |
功能说明 |
参数说明 |
|---|---|---|
|
创建 GIF 控件实例 |
|
|
打开 GIF 资源,可同时设置封面图、控件位置、延迟启动时间和帧间隔 |
|
|
启动或恢复 GIF 播放 |
|
|
暂停 GIF 播放,保留控件对象 |
|
|
关闭 GIF 资源,释放内部 GIF 或封面对象 |
|
|
设置 GIF 缩放比例 |
|
2.2 扩展功能¶
为满足需使用封面、延迟启动 GIF 播放的场景,基于 GIF 控件封装了简易的 lvsf_gif_anim 控件,接口定义在 solution/framework/gui_widget/include/lvsf_gif_anim.h。
接口函数 |
功能说明 |
参数说明 |
|---|---|---|
|
创建带封面、延时播放能力的 GIF 自定义控件实例 |
|
|
设置 GIF 整体缩放比例 |
|
|
设置 GIF 显示层级 |
|
|
使能或关闭背景色处理 |
|
|
启动或恢复 GIF 动画播放 |
|
|
暂停 GIF 动画播放 |
|
|
销毁 GIF 动画控件实例,释放关联资源 |
|
3. 示例说明¶
3.1 GIF 基础控件示例¶
lv_obj_t *bg_gif = lv_sfgif_create(lv_scr_act());
/* 打开 GIF 资源:无封面图、位置为 (0, 0)、立即播放、帧间隔 50 ms */
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);
3.2 gif_anim 示例¶
// 全局/静态变量:保存 gif_anim 控件实例
static lvsf_gif_anim_t *charge_gif = NULL;
static void on_start(void)
{
// 初始化控件:父对象 parent + gif 数据 + 封面图数据 + 坐标(0,0) + 帧间隔 + 启动延时
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)
{
if (charge_gif) {
lvsf_gif_anim_resume(charge_gif);
}
}
static void on_pause(void)
{
if (charge_gif) {
lvsf_gif_anim_pause(charge_gif);
}
}
static void on_stop(void)
{
if (charge_gif) {
lvsf_gif_anim_deinit(charge_gif);
charge_gif = NULL;
}
}
3.3 示例资源目录¶
3.4 案例效果展示¶
4. 注意事项¶
GIF 图像不支持透明度,如需实现透明效果,可考虑使用 apng控件 或 seqframe控件。
基础 GIF 控件的公开入口是
lv_sfgif_*;不要在业务文档中直接依赖底层lv_gif_dec_*接口。页面销毁或切换时,建议先调用
lv_sfgif_close或lvsf_gif_anim_deinit释放资源。