基于AGif+LVGL(V9)的动画示例

源码路径:example/multimedia/agif/lvgl_v9

支持的平台

  • eh-lb525

概述

本例程包含两个带gif动画的表盘,用于示例基于agif + lvgl(V9)的动画实现,包含:

  • .gif通过eZIP.exe转成.c:

    • 放置位置:src/resource/images/common/gif/

    • 资源处理:src/resource/images/SConscript会对上述路径下的.gif进行编译,编译生成的.c可在project/build_xxx/src/resource/images/common/gif路径中查看。

    小技巧

    资源也可以手动调用/tools/png2ezip/eZIP.exe处理,命令格式可以通过运行eZIP.exe查看帮助。

  • gif显示

    • src/gui_apps/clock/app_clock_agif.c:

      • 资源声明:

      /* Image decalration */
      LV_IMG_DECLARE(agif_icon);
      
      • gif控件创建和配置:

      /* Create agif. */
      lv_color_t bg_color;
      p_clk_agif->gif = lv_gif_dec_create(parent, LV_EXT_IMG_GET(agif_icon), &bg_color, LV_COLOR_DEPTH);
      RT_ASSERT(p_clk_agif->gif);
      lv_obj_align(p_clk_agif->gif, LV_ALIGN_CENTER, 0, 0);
      
      /* loop is enabled by default. */
      lv_gif_dec_loop(p_clk_agif->gif, 1, 16);
      /* This callback function is executed at the end of GIF playback. */
      lv_gif_dec_end_cb_register(p_clk_agif->gif, agif_loop_end_func);
      
      • gif刷新暂停、恢复:

      static rt_int32_t resume_callback(void)
      {
          /* Resume gif animation refresh */
          lv_gif_dec_task_resume(p_clk_agif->gif);
          return RT_EOK;
      }
      
      static rt_int32_t pause_callback(void)
      {
          /* Pause gif animation refresh */
          lv_gif_dec_task_pause(p_clk_agif->gif, 0);
          return RT_EOK;
      }
      
      • gif销毁

      /* Release gif context. */
      lv_gif_dec_destroy(p_clk_agif->gif);
      p_clk_agif->gif = NULL;
      
    • src/gui_apps/clock/app_clock_agif_2.c:
      lv_gif_dec_create会自动创建lv timer用于gif周期刷新,此处示例是停掉(lv_gif_dec_task_pause)自动创建的lv timer,外部创建lv timer进行刷新。刷新代码如下:

      static void agif_refresh_timer_cb(struct _lv_timer_t * t)
      {
          /* Next frame. */
          int ret = lv_gif_dec_next_frame(p_clk_agif->gif);
      
          /* if ret == 0, it means that reach the last frame. */
          if (0 == ret)
          {
              /* Playback complete. */
              agif_loop_end_func();
              /* Replay it. */
              lv_gif_dec_restart(p_clk_agif->gif);
          }
      }
      

例程的使用

硬件需求

运行该例程前,需要准备:

编译和烧录

切换到例程project目录,运行scons命令执行编译:

> scons --board=eh-lb525 -j32

切换到例程project/build_xx目录,运行uart_download.bat,按提示选择端口即可进行下载:

$ ./uart_download.bat

     Uart Download

please input the serial port num:5

关于编译、下载的详细步骤,请参考快速上手的相关介绍。

例程的预期结果

例程启动后:

  • 默认进入到agif表盘,agif_icon.gif循环刷新显示。

  • 左右滑动可以在aigfagif02表盘中切换。

  • agif.h中也有提供一些其它控制API,可以基于例程修改看效果。

异常诊断

  • 编译报错,gif资源找不到:可如概述中所述,确认gif的.c是否正常生成。

参考文档

更新记录

版本

日期

发布说明

0.0.1

05/2025

初始版本