LVGL(lv_bar进度条)

文章目录

    • 一、`lv_bar` 是什么?
    • 二、基本使用
      • 创建一个进度条
      • 设置进度值
    • 三、条形方向与填充方向
    • 四、范围模式(Range)
    • 五、事件处理(可选)
    • 六、自定义样式(可选)
    • 七、综合示例
    • 八、配合 `lv_timer` 或外部数据更新进度


lv_bar 是 LVGL 中的进度条控件,常用于显示任务的完成度、电量、音量、进度等连续值的变化。它的功能和我们常见的“进度条”非常类似,支持设置最小值、最大值、当前值,还可以自定义样式和动画。


一、lv_bar 是什么?

  • lv_obj 的子类。
  • 用于表示一个数值范围内的当前进度
  • 可横向、纵向显示,也支持动画、样式自定义。

二、基本使用

创建一个进度条

lv_obj_t *bar = lv_bar_create(lv_scr_act());   // 在当前屏幕创建进度条
lv_obj_set_size(bar, 200, 20);                 // 设置尺寸
lv_obj_center(bar);                            // 居中显示

设置进度值

lv_bar_set_range(bar, 0, 100);     // 设置范围,默认是 0 ~ 100
lv_bar_set_value(bar, 75, LV_ANIM_ON); // 设置当前值为 75,并开启动画

LV_ANIM_ON 表示过渡效果,LV_ANIM_OFF 表示立即生效。


三、条形方向与填充方向

虽然 LVGL 默认是从左到右填充,但我们也可以设置从下往上、右到左等方向:

lv_bar_set_mode(bar, LV_BAR_MODE_NORMAL);  // 默认左→右
lv_bar_set_mode(bar, LV_BAR_MODE_SYMMETRICAL); // 两端对称(适合正负数显示)
lv_bar_set_mode(bar, LV_BAR_MODE_RANGE);   // 设置范围段(如下节所述)

四、范围模式(Range)

你可以给 lv_bar 设置一个范围区段,比如表示电量阈值、安全值范围等:

lv_bar_set_start_value(bar, 30, LV_ANIM_OFF); // 设置起始值(仅在 RANGE 模式下生效)
lv_bar_set_value(bar, 70, LV_ANIM_OFF);       // 设置结束值
lv_bar_set_mode(bar, LV_BAR_MODE_RANGE);      // 启用范围显示模式

效果类似于表示「从 30% 到 70%」之间为某个特殊区段。


五、事件处理(可选)

通常不需要处理 lv_bar 的事件,但你可以监听它的值变化等:

void bar_event_cb(lv_event_t *e) {if (lv_event_get_code(e) == LV_EVENT_VALUE_CHANGED) {int val = lv_bar_get_value(lv_event_get_target(e));printf("新进度值: %d\n", val);}
}lv_obj_add_event_cb(bar, bar_event_cb, LV_EVENT_ALL, NULL);

六、自定义样式(可选)

lv_bar 有两个部分:背景(背景槽)指示器(填充部分),可以分别设置样式:

static lv_style_t style_bg, style_indic;
lv_style_init(&style_bg);
lv_style_set_bg_color(&style_bg, lv_color_hex(0xcccccc));lv_style_init(&style_indic);
lv_style_set_bg_color(&style_indic, lv_color_hex(0x00ff00));lv_obj_add_style(bar, &style_bg, LV_PART_MAIN);     // 设置背景部分
lv_obj_add_style(bar, &style_indic, LV_PART_INDICATOR); // 设置填充部分

七、综合示例

void create_my_bar(void)
{lv_obj_t *bar = lv_bar_create(lv_scr_act());lv_obj_set_size(bar, 200, 20);lv_obj_center(bar);lv_bar_set_range(bar, 0, 100);lv_bar_set_value(bar, 50, LV_ANIM_ON);  // 当前进度为50%
}

八、配合 lv_timer 或外部数据更新进度

可用于实时进度更新,如加载条、电池电量:

static lv_obj_t *bar;void update_bar_cb(lv_timer_t *timer)
{static int val = 0;val = (val + 1) % 101;lv_bar_set_value(bar, val, LV_ANIM_ON);
}void create_dynamic_bar(void)
{bar = lv_bar_create(lv_scr_act());lv_obj_set_size(bar, 200, 20);lv_obj_center(bar);lv_bar_set_range(bar, 0, 100);lv_bar_set_value(bar, 0, LV_ANIM_OFF);lv_timer_create(update_bar_cb, 100, NULL);  // 每100ms更新一次
}

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

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

相关文章

AI对话小技巧

角色设定:擅于使用 System 给 GPT 设定角色和任务,如“哲学大师"指令注入:在 System 中注入常驻任务指令,如“主题创作"问题拆解:将复杂问题拆解成的子问题,分步骤执行,如&#xff1a…

C++ 核心基础:数字、数组、字符串、指针与引用详解

C++ 核心基础:数字、数组、字符串、指针与引用详解 1. C++ 基础语法1.1 标识符与保留字1.2 数据类型概述1.3 基本输入输出2.1 基本整数类型(int、short、long、long long)2.2 无符号整数类型(unsigned int、unsigned short、unsigned long、unsigned long long)2.3 整数类…

HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先,需要在项目的文…

如何理解k8s中的controller

一、基本概念 在k8s中,Controller(控制器)是核心组件之一,其负责维护集群状态并确保集群内的实际状态与期望状态一致的一类组件。控制器通过观察集群的当前状态并将其与用户定义的期望状态进行对比,做出相应的调整来实…

《Go小技巧易错点100例》第三十二篇

本期分享: 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全: 1)双存储结构: 包含原子化的 read(只读缓存,无锁快…

【MySQL】行结构详解:InnoDb支持格式、如何存储、头信息区域、Null列表、变长字段以及与其他格式的对比

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

LabVIEW多通道并行数据存储系统

在工业自动化监测、航空航天测试、生物医学信号采集等领域,常常需要对多个传感器通道的数据进行同步采集,并根据后续分析需求以不同采样率保存特定通道组合。传统单线程数据存储方案难以满足实时性和资源利用效率的要求,因此设计一个高效的多…

【Linux系列】bash_profile 与 zshrc 的编辑与加载

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

针对Mkdocs部署到Githubpages加速访问速度的一些心得

加速网站访问的一些心得 在使用 MkDocs 构建网站时,为了提高访问速度,我们可以采取以下一些措施: 1. 优化图片 使用合适的图片格式,如 WebP、JPEG2000 等,减少图片文件大小,从而加快加载速度。 可以使用…

Mysql中切割字符串作为in的查询条件

问题:需要将一个字符串切割成数组作为in的查询条件,如: select * from table_1 where name in (select slit(names) from table_2 where id 3); names 返回的格式是’name1,name2,name3…,需要将name按照逗号切割作为in的查询条件&#xff1b…

云计算中的虚拟化:成本节省、可扩展性与灾难恢复的完美结合

云计算中虚拟化的 4 大优势 1. 成本效益 从本质上讲,虚拟化最大限度地减少了硬件蔓延。团队可以将多个虚拟机整合到单个物理主机上,而不是为每个工作负载部署单独的服务器。这大大减少了前期硬件投资和持续维护。 结果如何?更低的功耗、更低…

Linux : 多线程【线程概念】

Linux : 多线程【线程概念】 (一)线程概念线程是什么用户层的线程linux中PID与LWP的关系 (二) 进程地址空间页表(三) 线程总结线程的优点线程的缺点线程异常线程用途 (一)线程概念 线程是什么 在一个程序里的一个执行…

IDEA转战TREA AI IDE : springboot+maven+vue项目配置

一、trea下载安装 Trae官方网址: https://www.trae.com.cn/ Trae官方文档:https://docs.trae.com.cn/docs/what-is-trae?_langzh w3cschool: https://www.w3cschool.cn/traedocs/ai-settings.html 安装这里省略,正常安装即可。…

Java--图书管理系统(简易版)

目录 目录 前言 🔔1.library包 1.1 Book类 1.2 BookList类 🔔2.user包 2.1User类(父类) 2.2Admin(管理员) 2.3 NormalUser(普通用户) 🔔3.Operation包 🕐3.1 IOperation接口 🕑3.2ListOperation(查看操作)…

深入浅出:Spring Boot 中 RestTemplate 的完整使用指南

在分布式系统开发中,服务间通信是常见需求。作为 Spring 框架的重要组件,RestTemplate 为开发者提供了简洁优雅的 HTTP 客户端解决方案。本文将从零开始讲解 RestTemplate 的核心用法,并附赠真实地图 API 对接案例。 一、环境准备 在 Spring…

大数据处理利器:Hadoop 入门指南

一、Hadoop 是什么?—— 分布式计算的基石 在大数据时代,处理海量数据需要强大的技术支撑,Hadoop 应运而生。Apache Hadoop 是一个开源的分布式计算框架,致力于为大规模数据集提供可靠、可扩展的分布式处理能力。其核心设计理念是…

685SJBH计量管理系统

摘 要 计量,在我国已有五千年的历史。计量的发展与社会进步联系在一起,它是人类文明的重要组成部分。它的发展经历了古典阶段、经典阶段和现代阶段。而企业的计量管理是对测量数据、测量过程和测量设备的管理。 本系统通过分析现有计量系统的业务逻辑…

从0到1构建前端监控系统:错误捕获、性能采集、用户体验全链路追踪实战指南SDK实现

目录 前言为什么要做前端监控前端监控目标稳定性用户体验业务 前端监控流程常见埋点方案代码埋点可视化埋点无痕埋点 创建项目第一步、创建monitor文件,cmd进入文件进行npm init -y 项目初始化第二步、创建src/index.js和src/index.html文件第三步、创建webpack.con…

前端浏览器判断设备类型的方法

前端浏览器判断设备类型的方法 在前端开发中,判断设备类型(如手机、平板、桌面电脑)有多种方法,以下是常用的几种方式: 1. 使用 User Agent 检测 通过 navigator.userAgent 获取用户代理字符串进行判断:…