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.pswp.cn/diannao/82589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82589.shtml
英文地址,請注明出處:http://en.pswp.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 獲取用戶代理字符串進行判斷:…