欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 44|回复: 0

LVGL进度条内显示百分比的程序

[复制链接]
发表于 2023-5-17 16:10:52 | 显示全部楼层 |阅读模式




当进度条进度小于20的时候,内部的百分比在右边显示
反之大于20的时候则在左边显示
  1. //带数字进度条
  2. // *  函数名称 :  bar_set_value
  3. // *  参    数 : 无
  4. // *  函数功能 : 回调实现显示值
  5. static void bar_set_value(void * bar,int32_t v)
  6. {
  7.                         lv_bar_set_value(bar,v,LV_ANIM_OFF);
  8. }
  9. // *  函数名称 :  bar_event_cb
  10. // *  参    数 : 无
  11. // *  函数功能 : 回调处理值
  12. static void bar_event_cb(lv_event_t * e)
  13. {
  14.                         lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e); //获取回调参数
  15.                         if(dsc->part != LV_PART_INDICATOR)  return;

  16.                         lv_obj_t * obj = lv_event_get_target(e);              //获取回调对象

  17.                         lv_draw_label_dsc_t label_dsc;                        //创建绘制描述符
  18.                         lv_draw_label_dsc_init(&label_dsc);                   //初始化绘制描述符
  19. //                        label_dsc.font = LV_FONT_DEFAULT;                     //设置绘制描述符字体
  20.                         label_dsc.font = &lv_font_montserrat_10;                     //设置绘制描述符字体

  21.                         char buf[8];                                          //定义一个接收变量
  22.                         lv_snprintf(buf,sizeof(buf),"%d%%",(int)lv_bar_get_value(obj));  //将获得的bar的值到打印到buf中
  23.                         lv_point_t txt_size;                                  //设置点变量
  24.                         //获取文本大小
  25.                         lv_txt_get_size(&txt_size,buf,label_dsc.font,label_dsc.letter_space,label_dsc.line_space,LV_COORD_MAX,label_dsc.flag);

  26.                         lv_area_t txt_area;                                   //表示屏幕的一个区域 具有两个坐标值可以显示一个内容具体位置和大小
  27.                         if(lv_area_get_width(dsc->draw_area) > txt_size.x + 20)//当获取bar进度条的值大于显示数字的宽度 + 20
  28.         {
  29.                         txt_area.x2 = dsc->draw_area->x2 - 5;              //设置x2的位置,就是要在bar内部 获取进度条最右端的值减去5
  30.                         txt_area.x1 = txt_area.x2 - txt_size.x + 1;        //更具x2的值减去 获取字体的宽度值
  31.                         label_dsc.color = lv_color_white();                //设置显示字体
  32.         }
  33.                         else
  34.         {                                                //在bar外部显示
  35.                         txt_area.x1 = dsc->draw_area->x2 + 5;              //显示的最左边位置直接显示在进度条的最右端 + 5 位置
  36.                         txt_area.x2 = txt_area.x1 + txt_size.x - 1;        //显示字体最右端的位置
  37.                         label_dsc.color = lv_color_white();                //设置显示字体
  38.         }
  39.                         txt_area.y1 = dsc->draw_area->y1 + (lv_area_get_height(dsc->draw_area) - txt_size.y) / 2; //设置字体y1 的位置
  40.                         txt_area.y2 = txt_area.y1 + txt_size.y -1;            //设置字体y2的位置
  41.                         lv_draw_label(dsc->draw_ctx, &label_dsc, &txt_area, buf, NULL);   //重绘显示内容
  42. }
  43. // *  函数名称 :  bar_show_6
  44. // *  参    数 : 无
  45. // *  函数功能 : bar显示
  46. void Boot_Pagr(lv_obj_t * parent)
  47. {
  48.                         lv_obj_t * bar = lv_bar_create(parent);         //创建bar对象
  49.                         lv_obj_add_event_cb(bar,bar_event_cb,LV_EVENT_DRAW_PART_END,NULL);//添加回调事件
  50.                         lv_obj_set_size(bar,200,12);                          //设置尺寸
  51.                         lv_obj_center(bar);                                   //居中显示
  52.                         lv_obj_align(bar,LV_ALIGN_CENTER, 0, 0);  //设置父对象的位置居中

  53.                         lv_anim_t a;                                          //创建动画对象
  54.                         lv_anim_init(&a);                                     //初始化动画
  55.                         lv_anim_set_var(&a,bar);                              //设置动画对象
  56.                         lv_anim_set_values(&a,0,100);                         //设置动画值
  57.                         lv_anim_set_exec_cb(&a,bar_set_value);                //设置回调
  58.                         lv_anim_set_time(&a,8000);                            //设置时间
  59.                         lv_anim_set_playback_time(&a,1000);                   //设置回放时间
  60.                         lv_anim_set_repeat_count(&a,LV_ANIM_REPEAT_INFINITE); //设置计数
  61.                         lv_anim_start(&a);                                    //开始动画
  62. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2025-10-31 17:19

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表