发帖
10 0 0

【小熊带你玩转小安派】添加一个播放按钮

ifwz1729
高级会员

9

主题

42

回帖

910

积分

高级会员

积分
910
LVGL教程玩法 2222 10 2023-9-18 23:13:40
本系列图文连载,第7话

首先祝贺我找到了工作!!!我上岸了!!!
今天拼了一整天积木,晚上逛完街才想起来,没更教程,匆匆水一期

正文开始:



                               
登录/注册后可看大图



上一话教程,我们做了一个简陋的天空人时钟,今天我们来学习代码,给天空人动画添加一个播放按钮
本期教程必须学会,不然后面的教程就看不懂了(虽然我还不知道写啥)

推荐学习本节前,先看这个视频  https://www.bilibili.com/video/BV1LU4y1q7vd

我们使用GUI-Guider生成代码时,会生成两个文件夹

Snipaste_2023-09-18_22-40-27.png

generated 文件夹中的代码不能乱改,咱们这一节想实现通过按钮点击开始播放太空人动画,像这样自定义功能,需要修改custom文件夹中的custom.c

根据之前的教程,设计下界面
Snipaste_2023-09-18_22-46-50.png

因为我也不会写lvgl代码,下面使用一个取巧的办法获取代码
1. 首先,我们来看看哪个函数实现图片播放
将动图设置成自动播放(比较一下如果不自动播放,生成的代码)
会发现在generated —— setup_scr_screen.c 初始化动图控件的代码中多出来一行  
  1. lv_animimg_start(ui->screen_animimg_1);   //从函数名就能看出是开始播放
复制代码
2. 然后,我们来看看如何点击按钮触发函数
将按钮绑定点击事件,绑定到动图的显隐功能上
Snipaste_2023-09-18_22-53-38.png
生成一下代码,会在generated —— events_init.c 里生成按钮点击的代码(敲重点!!!这里就是我们想要的)
Snipaste_2023-09-18_22-55-10.png

生成的这些代码,仅需要改两行,就能实现播放动画的功能
  1. <blockquote>#include "events_init.h"
复制代码
我们找到工程文件夹里的custom文件夹中的custom.c
将上述代码无脑复制进来,删掉 lv_obj_add_flag(guider_ui.screen_animimg_1, LV_OBJ_FLAG_HIDDEN); 这一行
尝试一下将  lv_animimg_start(ui->screen_animimg_1);  复制到这里
将按钮的绑定删掉,将动图的自动播放关掉
运行一下模拟器
不出意外的就出意外了,会报错!
报错说 没有 ui 这个参数传进来,我们学习删掉的这行 lv_obj_add_flag(guider_ui.screen_animimg_1, LV_OBJ_FLAG_HIDDEN);  的写法
lv_animimg_start(ui->screen_animimg_1);  修改成 lv_animimg_start(guider_ui.screen_animimg_1);  


void events_init_screen(lv_ui *ui)函数删掉,把 lv_obj_add_event_cb(ui->screen_btn_1, screen_btn_1_event_handler, LV_EVENT_ALL, NULL); 粘贴到void custom_init(lv_ui *ui)函数里
运行一下模拟器,就不报错了,点击按钮实现播放动图!


1.gif
修改后的custom.c
  1. /*********************
  2. *      INCLUDES
  3. *********************/
  4. #include <stdio.h>
  5. #include "lvgl.h"
  6. #include "custom.h"

  7. /*********************
  8. *      DEFINES
  9. *********************/

  10. /**********************
  11. *      TYPEDEFS
  12. **********************/

  13. /**********************
  14. *  STATIC PROTOTYPES
  15. **********************/

  16. /**********************
  17. *  STATIC VARIABLES
  18. **********************/

  19. /**
  20. * Create a demo application
  21. */
  22. #include "events_init.h"
  23. #include <stdio.h>
  24. #include "lvgl.h"


  25. static void screen_btn_1_event_handler (lv_event_t *e)
  26. {
  27.         lv_event_code_t code = lv_event_get_code(e);

  28.         switch (code) {
  29.         case LV_EVENT_CLICKED:
  30.         {
  31.                 lv_animimg_start(guider_ui.screen_animimg_1);
  32.                 break;
  33.         }
  34.         default:
  35.                 break;
  36.         }
  37. }

  38. void custom_init(lv_ui *ui)
  39. {
  40.     /* Add your codes here */
  41. lv_obj_add_event_cb(ui->screen_btn_1, screen_btn_1_event_handler, LV_EVENT_ALL, NULL);
  42. }
复制代码


本期教程结束,是不是很简单呀
后面的教程我们将接触更多lvgl代码,各位同学做好心理准备哦
──── 0人觉得很赞 ────

使用道具 举报

2023-9-18 23:41:44
学习
2023-9-19 00:10:26
发个批量改图片引用库的小程序 https://ifwz.lanzouw.com/it20i18zwy9a

Snipaste_2023-09-19_00-24-28.png

2023-9-19 08:45:39
学习
2023-9-19 09:14:03
学习了
2023-9-19 10:54:26
找一天实践一下!
学习
2023-9-19 14:19:42
大佬
2023-9-19 14:39:36
学习
2023-9-20 22:01:14
打卡学习
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 28290 个
  • 话题数: 40269 篇