LVGL 控件之进度条(lv_bar)

news2024/11/24 13:00:36

目录

  • 一、进度条
    • 1、概述
    • 2、方向
    • 3、进度条的当前值和范围值
    • 4、进度条模式
    • 5、进度条事件
    • 6、相关 API
  • 二、例程


一、进度条

1、概述

进度条对象(lv_bar)有一个背景和一个指示器。指示器的宽度根据进度条的当前值自动设置。

如果设置进度条的宽度小于其高度,就可以创建出垂直摆放的进度条。。

不仅可以设置结束,还可以设置进度条的起始值,从而改变指标的起始位置。

  1. 背景(LV_PART_MAIN):用于显示范围值;
  2. 指示器(LV_PART_INDICATOR):用于显示当前值

2、方向

进度条可以设置为水平或者垂直方向,当它的宽度小于高度时,其为水平方向,反之为垂直方向。

例一:当长度大于宽度时,为水平显示:

lv_obj_t * bar_ltr = lv_bar_create(lv_scr_act());  //创建bar对象
lv_obj_set_size(bar_ltr,200,20);                   //设置尺寸
lv_bar_set_value(bar_ltr,70,LV_ANIM_OFF);          //设置初始值
lv_obj_align(bar_ltr,LV_ALIGN_CENTER,0,-30);       //设置位置

在这里插入图片描述

例二:当长度小于宽度时,为垂直显示:

lv_obj_t * bar_ltr = lv_bar_create(lv_scr_act());  //创建bar对象
lv_obj_set_size(bar_ltr,20,200);                   //设置尺寸
lv_bar_set_value(bar_ltr,70,LV_ANIM_OFF);          //设置初始值
lv_obj_align(bar_ltr,LV_ALIGN_CENTER,0,-30);       //设置位置

在这里插入图片描述
例三:改变进度条指示器方向:

void my_gui(void)
{
    lv_obj_t * bar_ltr = lv_bar_create(lv_scr_act());  //创建bar对象
    lv_obj_set_size(bar_ltr,200,20);                   //设置尺寸
   lv_bar_set_value(bar_ltr,70,LV_ANIM_OFF);           //设置初始值
   lv_obj_align(bar_ltr,LV_ALIGN_CENTER,0,-30);        //设置位置

   lv_obj_t * bar_rtl = lv_bar_create(lv_scr_act());      //创建bar对象
   lv_obj_set_style_base_dir(bar_rtl,LV_BASE_DIR_RTL,0);  //设置基类方向
   lv_obj_set_size(bar_rtl,200,20);                       //设置尺寸
   lv_bar_set_value(bar_rtl,70,LV_ANIM_OFF);              //设置初始值
   lv_obj_align(bar_rtl,LV_ALIGN_CENTER,0,30);            //设置位置
}

3、进度条的当前值和范围值

进度条当前值指的是当前指示器所指示的值,范围值是指进度条当前值的可变化范围,用户需要设置这两个参数,可以调用以下函数:

函数含义
lv_bar_set_range(bar, min, max)设置进度条部件范
lv_bar_set_value(bar, new_value, LV_ANIM_ON/OFF)设置进度条当前值

其中,当前值设置函数的最后一个形参代表是否使用动画,如果使用动画请传入 LV_ANIM_ON,否则传入 LV_ANIM_OFF

注意:在默认情况下,范围值为 0~100,进度条都是从该范围的最小值开始绘制的。

例四:

void my_gui(void)
{
    lv_obj_t* lv_bar = lv_bar_create(lv_scr_act());  /* 创建进度条 */
    lv_obj_set_style_bg_color(lv_bar, lv_color_black(),LV_STATE_DEFAULT);
    lv_obj_set_style_bg_color(lv_bar, lv_palette_main(LV_PALETTE_BLUE),
                              LV_STATE_DEFAULT);

    lv_obj_set_size(lv_bar, 20, 100);  /* 设置进度条的大小 */
    lv_bar_set_range(lv_bar, 0, 100);  /* 设置进度条的范围 */

    lv_obj_align(lv_bar, LV_ALIGN_CENTER, 0, 0);  /* 设置对齐模式 */

    /* 填充满的时间 */
    lv_obj_set_style_anim_time(lv_bar, 5000, LV_STATE_DEFAULT);
    lv_bar_set_value(lv_bar, 100, LV_ANIM_ON);  /* 设置进度条当前值,并开启动画 */
}

4、进度条模式

进度条部件具有三种模式,它们对应的枚举如下所示:

  1. LV_BAR_MODE_NORMAL:普通模式(默认);
  2. LV_BAR_MODE_SYMMETRICAL:始终从零开始绘制,范围值可以是负数;
  3. LV_BAR_MODE_RANGE:允许设置起始值,该起始值必须始终小于结束值。
函数含义
lv_bar_set_mode(lv_obj_t *objj, lv_bar_mode_t mode)设置进度条模式

例五:

void my_gui(void)
{
    lv_obj_t* bar = lv_bar_create(lv_scr_act());  /* 创建 bar 部件 */
    lv_obj_center(bar);
    lv_obj_set_style_bg_color(bar, lv_color_black(), LV_STATE_DEFAULT);
    lv_obj_set_style_bg_color(bar, lv_palette_main(LV_PALETTE_BLUE),
                              LV_STATE_DEFAULT);

    lv_bar_set_mode(bar, LV_BAR_MODE_SYMMETRICAL);            /* 设置模式 */
    lv_bar_set_range(bar, -100, 100);                         /* 设置范围值 */
    lv_obj_set_style_anim_time(bar, 5000, LV_STATE_DEFAULT);  /* 设置动画时间 */
    lv_bar_set_value(bar, 100, LV_ANIM_ON);                   /* 设置当前值*/
}


我设置的范围是 -100~100,且设置的模式是 LV_BAR_MODE_SYMMETRICAL,所以要从 0 开始绘制。

5、进度条事件

LV_BAR_DRAW_PART_INDICATOR:绘制指示器。

6、相关 API

LVGL 官方提供了一些与进度条部件相关API,如下表所示:

函数描述
lv_bar_create()创建进度条
lv_bar_set_value()设置进度条当前值
lv_bar_set_start_value()设置进度条起始值
lv_bar_set_range()设置进度条范围值
lv_bar_set_mode()设置进度条模式
lv_bar_get_value()获取进度条的当前值
lv_bar_get_start_value()获取进度条起始值
lv_bar_get_min_value()获取进度条最小值
lv_bar_get_max_value()获取进度条最大值
lv_bar_get_mode()获取进度条模式

二、例程

// bar对象动画回调函数
static void obj_bar_anim_exec_callback(void * bar, int32_t value)
{
    if (bar != NULL)
    {
        lv_bar_set_value((lv_obj_t *)bar, value, LV_ANIM_ON); // 设置进度条对象的值
    }
}


void my_gui()
{
    lv_obj_t * main_container = lv_obj_create(lv_scr_act());
    if (main_container == NULL)
	{
		printf("[%s:%d] create main_container failed\n", __FUNCTION__, __LINE__);
		return;
	}

    lv_obj_set_style_pad_all(main_container, 0, 0);
    lv_obj_set_style_border_width(main_container, 0, 0);                  // 边框宽
    lv_obj_set_style_radius(main_container, 0, 0);                        // 圆角大小
    lv_obj_set_size(main_container, LV_PCT(100), LV_PCT(100));            // 设置尺寸
    lv_obj_set_style_bg_opa(main_container, LV_OPA_100, 0);               // 设置背景不透明度
    lv_obj_set_style_bg_color(main_container, lv_color_hex(0x355edc), 0); // 设置背景颜色
    lv_obj_center(main_container);

    lv_obj_t * obj_label = lv_label_create(main_container);
    if (obj_label != NULL)
    {
        lv_obj_set_style_text_color(obj_label, lv_color_white(), 0); // 设置文本颜色
        lv_obj_set_style_text_font(obj_label,(const lv_font_t *)(&lv_font_montserrat_20), 0); // 设置文本字体大小
        lv_label_set_text(obj_label, "Software is upgrading, Please wait!"); // 设置文本内容
        lv_obj_align(obj_label, LV_ALIGN_CENTER, 0, -30);
    }

    static lv_style_t style_bg;
    lv_style_init(&style_bg);
    lv_style_reset(&style_bg);
    lv_style_set_border_color(&style_bg, lv_color_hex(0xFFFFFF)); // 设置边框颜色
    lv_style_set_border_width(&style_bg, 2); // 设置边框宽度
    lv_style_set_pad_all(&style_bg, 6);
    lv_style_set_radius(&style_bg, 6); // 设置圆角弧度

    static lv_style_t style_indic;
    lv_style_reset(&style_indic);
    lv_style_init(&style_indic);
    lv_style_set_bg_opa(&style_indic, LV_OPA_COVER); // 设置背景不透明度
    lv_style_set_bg_color(&style_indic, lv_color_hex(0xFFFFFF));
    lv_style_set_radius(&style_indic, 3);

    lv_obj_t * obj_bar = lv_bar_create(main_container);  // 创建一个进度条
    if (obj_bar != NULL)
    {
        lv_obj_remove_style_all(obj_bar);  // 清除所有样式
        lv_obj_add_style(obj_bar, &style_bg, 0);
        lv_obj_add_style(obj_bar, &style_indic, LV_PART_INDICATOR);
        lv_obj_set_size(obj_bar, 400, 20);
        lv_obj_align(obj_bar, LV_ALIGN_CENTER, 0, 30);

        lv_anim_t anim;
        lv_anim_init(&anim);                                      // 初始化动画
        lv_anim_set_exec_cb(&anim, obj_bar_anim_exec_callback);   // 添加回调函数
        lv_anim_set_time(&anim, 5000);                            // 设置动画时长
        lv_anim_set_var(&anim, obj_bar);                          // 动画绑定对象
        lv_anim_set_values(&anim, 0, 100);                        // 设置开始值和结束值
        lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE); // 重复次数,默认值为1 LV_ANIM_REPEAT_INFINIT用于无限重复
        lv_anim_start(&anim);                                     // 应用动画效果
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C++] C++11详解 (五)function包装器、bind绑定

标题&#xff1a;[C] C11详解 (五)function包装器、bind 水墨不写bug 目录 一、function包装器 二、bind绑定 正文开始&#xff1a; 一、function包装器 function包装器&#xff0c;function实现在<functional>头文件中。C中的function本质上是一个类模板。 function…

由浅入深学习 C 语言:Hello World【提高篇】

目录 引言 1. Hello World 程序代码 2. C 语言角度分析 Hello World 程序 2.1. 程序功能分析 2.2 指针 2.3 常量指针 2.4 指针常量 3. 反汇编角度分析 Hello World 程序 3.1 栈 3.2 函数用栈传递参数 3.3 函数调用栈 3.4 函数栈帧 3.5 相关寄存器 3.6 相关汇编指令…

离散傅里叶变换(Discrete Fourier Transform, DFT)介绍,地震波分析

介绍 离散傅里叶变换&#xff08;Discrete Fourier Transform, DFT&#xff09;是一种非常重要的信号处理工具&#xff0c;它将离散时间信号从时间域转换到频率域。DFT在信号处理、图像处理、通信系统以及许多其他工程和科学领域中得到了广泛应用。为了理解DFT&#xff0c;我们…

时序预测 | 基于DLinear+PatchTST多变量时间序列预测模型(pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 DLinearPatchTST多变量时间序列 dlinear,patchtst python代码&#xff0c;pytorch架构 适合功率预测&#xff0c;风电光伏预测&#xff0c;负荷预测&#xff0c;流量预测&#xff0c;浓度预测&#xff0c;机械领域预…

3.美食推荐系统(Java项目springboot和vue)

目录 0.系统的受众说明 1 绪论 1.1研究背景 1.2研究现状 1.3研究内容 2 系统关键技术 2.1 Springboot框架 2.2 JAVA技术 2.3 MYSQL数据库 2.4 B/S结构 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2 系统性能分析 3.3 系统功能分析 3.4系统…

【3D目标检测】MMdetection3d——nuScenes数据集训练BEVFusion

引言 MMdetection3d&#xff1a;【3D目标检测】环境搭建&#xff08;OpenPCDet、MMdetection3d&#xff09; MMdetection3d源码地址&#xff1a;https://github.com/open-mmlab/mmdetection3d/tree/main?tabreadme-ov-file IS-Fusion源码地址&#xff1a;https://github.co…

139. MySQL同步ES的四种方案

文章目录 1. 前言2. 数据同步方案2.1 同步双写2.2 异步双写2.3 基于 SQL 抽取2.4 基于 Binlog 实时同步 3. 数据迁移工具选型3.1 Canel3.2 阿里云 DTS3.3 Databus3.4 其它 4. 后记 本文介绍数据同步的 4 种方案&#xff0c;并给出常用数据迁移工具&#xff0c;目录如下&#xf…

【软件测试专栏】认识软件测试、测试与开发的区别

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;软件测试专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 认识软件测试、测试与开发的区别 关键词&#xff1a;软件测试、测…

最短路算法详解(Dijkstra 算法,Bellman-Ford 算法,Floyd-Warshall 算法)

文章目录 一、Dijkstra 算法二、Bellman-Ford 算法三、Floyd-Warshall 算法 由于文章篇幅有限&#xff0c;下面都只给出算法对应的部分代码&#xff0c;需要全部代码调试参考的请点击&#xff1a; 图的源码 最短路径问题&#xff1a;从在带权图的某一顶点出发&#xff0c;找出…

【PyCharm激活码】2024年最新pycharm专业版激活码+安装教程!

一、PyCharm激活 激活码&#xff1a; KQ8KMJ77TY-eyJsaWNlbnNlSWQiOiJLUThLTUo3N1RZIiwibGljZW5zZWVOYW1lIjoiVW5pdmVyc2l0YXMgTmVnZXJpIE1hbGFuZyIsImxpY2Vuc2VlVHlwZSI6IkNMQVNTUk9PTSIsImFzc2lnbmVlTmFtZSI6IkpldOWFqOWutuahtiDorqTlh4blupflkI0iLCJhc3NpZ25lZUVtYWlsIjoi…

ArcEngine二次开发实用函数18:使用shp矢量对栅格文件进行掩模和GP授权获取

目录 1. 权限设置 2. 添加如下引用 3. 核心代码: 首先要确定要使用的gp工具需要什么权限,这个可以在工具的帮助中查看;获取权限之后,引用名称空间,编写处理代码: 下面给出具体的实例代码: 1. 权限设置 ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Eng…

介绍一下最近很火的一款游戏黑神话悟空,以及国产游戏面临的挑战

《黑神话&#xff1a;悟空》是一款由杭州游科互动科技有限公司开发的单机动作角色扮演游戏&#xff0c;以中国古典名著《西游记》为背景。游戏在2024年8月20日上线&#xff0c;支持PC&#xff08;Steam、Epic、Wegame&#xff09;和PlayStation 5平台&#xff0c;未来还将登陆X…

OpenCV绘图函数(13)绘制多边形函数函数polylines()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 画几条多边形曲线 函数原型 void cv::polylines (InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar & color…

浅谈 Android 15 新 API:确保 TextView 完整展示、不被切断~

本文为稀土掘金技术社区首发签约文章&#xff0c;30天内禁止转载&#xff0c;30天后未获授权禁止转载&#xff0c;侵权必究&#xff01; 前言 很多语言和文字拥有特殊的、复杂的写法、画法&#xff0c;一个字符可能延伸到前一个字符的区域&#xff0c;甚至后一个字符的区域。 …

力扣375.猜数字大小 II

力扣375.猜数字大小 II dp dp[i][j]是说依次以从i到j的数字作为分割点(猜的数)&#xff0c;必定赢的游戏所用钱的最小值。 枚举每一列&#xff0c;从下往上算出dp[i][j]&#xff0c;最终答案为dp[1][n] class Solution {public:int getMoneyAmount(int n) {if(n 1)retu…

巧用scss实现一个通用的媒介查询代码

巧用scss实现一个通用的媒介查询代码 效果展示 实现代码 <template><div class"page-root"><div class"header"></div><div class"content"><div class"car-item" v-for"item in 9">…

20行为型设计模式——访问者模式

一、访问者模介绍 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;用于将操作封装在访问者对象中&#xff0c;以便在不改变被访问对象的类的前提下&#xff0c;定义新的操作。它允许你在不修改现有代码的情况下&#xff0c;向对象结构中添…

类和对象以及内存管理

对象拷贝时的编译器优化 现代编译器会为了尽可能提高程序的效率&#xff0c;在不影响正确性的情况下会尽可能减少⼀些传参和传返回值的过程中可以省略的拷贝。如何优化C标准并没有严格规定&#xff0c;各个编译器会根据情况自行处理。当前主流的相对新⼀点的编译器对于连续⼀个…

电池信息 v5.29.11 高级版,智能优化充电,最多可延长50%电池寿命

Charging Master 是一款非常实用的安卓 APP&#xff0c;专注于为您的手机充电提供最佳体验。借助其智能优化功能&#xff0c;Charging Master 能够最大程度地延长电池寿命&#xff0c;最多可达 50% 的节省。此外&#xff0c;该应用还提供了一系列功能&#xff0c;助您更好地管理…

提升团队效率的9款免费办公工具评测

本文主要介绍了以下9款协同办公软件&#xff1a;1.Worktile&#xff1b;2.PingCode&#xff1b;3.石墨文档&#xff1b;4.Teambition&#xff1b;5.蓝湖&#xff1b;6.工作宝&#xff1b;7.飞书&#xff1b;8.Asana&#xff1b;9.ClickUp。 在现代职场中&#xff0c;团队协作已…