LVGL(lv_slider滑動條)

文章目錄

    • 一、`lv_slider` 是什么?
    • 二、創建一個滑塊
      • 設置滑塊的范圍和初始值
    • 三、響應滑塊事件
    • 四、設置樣式
      • 示例:更改滑塊顏色和滑塊按鈕樣式
    • 五、縱向滑塊(垂直方向)
    • 六、雙滑塊模式(范圍選擇)
    • 七、獲取滑塊的值
    • 八、綜合示例
    • 九、與標簽聯動顯示數值(進階示例)
    • 十、總結


lv_slider 是 LVGL 中的滑塊控件,功能類似于你在音量調節、電量調節、亮度調節、滾動條等常見 UI 中見到的滑動條。它是 lv_bar 的子類,因此具有所有 lv_bar 的特性,并額外提供了可拖動的指針(滑塊)


一、lv_slider 是什么?

  • lv_bar 的子類,擁有進度條的全部功能。
  • 支持用戶通過觸控/鼠標拖動滑塊改變數值
  • 支持單向進度、**區間進度(雙滑塊)**模式。
  • 可橫向或縱向使用。

二、創建一個滑塊

lv_obj_t *slider = lv_slider_create(lv_scr_act());  // 在當前屏幕創建滑塊
lv_obj_set_width(slider, 200);                      // 設置寬度
lv_obj_center(slider);                              // 居中顯示

設置滑塊的范圍和初始值

lv_slider_set_range(slider, 0, 100);                // 設置范圍
lv_slider_set_value(slider, 40, LV_ANIM_OFF);       // 設置初始值(無動畫)

三、響應滑塊事件

用戶拖動滑塊時,你通常會監聽 LV_EVENT_VALUE_CHANGED 事件獲取當前值。

void slider_event_cb(lv_event_t *e)
{if(lv_event_get_code(e) == LV_EVENT_VALUE_CHANGED) {lv_obj_t *slider = lv_event_get_target(e);int val = lv_slider_get_value(slider);printf("滑塊值: %d\n", val);}
}lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

四、設置樣式

lv_slider 有三個主要部分可以設置樣式:

部位對應區域
LV_PART_MAIN背景槽(未填充的部分)
LV_PART_INDICATOR已填充區域(進度)
LV_PART_KNOB滑塊按鈕(可拖動的圓點)

示例:更改滑塊顏色和滑塊按鈕樣式

static lv_style_t style_knob;
lv_style_init(&style_knob);
lv_style_set_bg_color(&style_knob, lv_color_hex(0xff0000));
lv_style_set_radius(&style_knob, LV_RADIUS_CIRCLE);
lv_style_set_pad_all(&style_knob, 6); // 設置 knob 尺寸lv_obj_add_style(slider, &style_knob, LV_PART_KNOB);

五、縱向滑塊(垂直方向)

默認是橫向滑動。你可以通過設置尺寸為“瘦高”來做縱向滑動條:

lv_obj_set_size(slider, 20, 150); // 瘦長樣式

六、雙滑塊模式(范圍選擇)

LVGL 支持范圍滑塊(類似 A 點到 B 點的選區),需要啟用 LV_USE_SLIDER && LV_SLIDER_RANGE

lv_slider_set_mode(slider, LV_SLIDER_MODE_RANGE);     // 啟用范圍模式
lv_slider_set_value(slider, 40, LV_ANIM_OFF);         // 設置右側滑塊值
lv_slider_set_left_value(slider, 20, LV_ANIM_OFF);    // 設置左側滑塊值

范圍滑塊適合做“區間選擇”,比如設置溫度上下限。


七、獲取滑塊的值

int val = lv_slider_get_value(slider);            // 當前滑塊值
int left = lv_slider_get_left_value(slider);      // 左側滑塊值(僅范圍模式下)

八、綜合示例

void create_slider(void)
{lv_obj_t *slider = lv_slider_create(lv_scr_act());lv_obj_set_width(slider, 200);lv_obj_center(slider);lv_slider_set_range(slider, 0, 100);lv_slider_set_value(slider, 50, LV_ANIM_OFF);lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
}

九、與標簽聯動顯示數值(進階示例)

static lv_obj_t *label;void slider_event_cb(lv_event_t *e)
{lv_obj_t *slider = lv_event_get_target(e);int val = lv_slider_get_value(slider);char buf[16];lv_snprintf(buf, sizeof(buf), "%d%%", val);lv_label_set_text(label, buf);
}void create_slider_with_label(void)
{lv_obj_t *slider = lv_slider_create(lv_scr_act());lv_obj_set_width(slider, 200);lv_obj_align(slider, LV_ALIGN_CENTER, 0, -20);lv_slider_set_range(slider, 0, 100);lv_slider_set_value(slider, 30, LV_ANIM_OFF);lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);label = lv_label_create(lv_scr_act());lv_label_set_text(label, "30%");lv_obj_align(label, LV_ALIGN_CENTER, 0, 30);
}

十、總結

功能API 示例
創建滑塊lv_slider_create()
設置范圍lv_slider_set_range(slider, min, max)
設置值lv_slider_set_value(slider, val, anim)
獲取當前值lv_slider_get_value(slider)
啟用范圍選擇模式lv_slider_set_mode(slider, LV_SLIDER_MODE_RANGE)
設置左滑塊值lv_slider_set_left_value(slider, val, anim)
設置樣式lv_obj_add_style(slider, &style, part)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82595.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82595.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82595.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日算法-250511

每日算法 - 250511 記錄一下今天刷的幾道LeetCode題目,主要是關于貪心算法和數組處理。 1221. 分割平衡字符串 題目 思路 貪心 解題過程 我們可以遍歷一次字符串,維護一個計數器 balance。當遇到字符 L 時,balance 增加;當遇…

Keepalived + LVS + Nginx 實現高可用 + 負載均衡

目錄 Keepalived Keepalived 是什么(高可用) 安裝 Keepalived LVS LVS 是什么(負載均衡) 安裝 LVS Keepalived LVS Nginx 實現 高可用 負載均衡 Keepalived Keepalived 是什么(高可用) Keepaliv…

【雜談】-DeepSeek-GRM:讓AI更高效、更普及的先進技術

DeepSeek-GRM:讓AI更高效、更普及的先進技術 文章目錄 DeepSeek-GRM:讓AI更高效、更普及的先進技術1、DeepSeek-GRM:先進的AI框架解析2、DeepSeek-GRM:AI開發的變革之力3、DeepSeek-GRM:廣泛的應用前景4、企業自動化解…

【MySQL】頁結構詳解:頁的大小、分類、頭尾信息、數據行、查詢、記錄及數據頁的完整結構

📢博客主頁:https://blog.csdn.net/2301_779549673 📢博客倉庫:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正! &…

【FreeRTOS】基于G431+Cubemx自用筆記

系列文章目錄 留空 文章目錄 系列文章目錄前言一、從頭開始創建一個FreeRTOS工程1.1 在 "Timebase Source" 中,選擇其他TIM1.2 配置FreeRTOS的參數1. 3 添加任務 二、動態任務的創建/刪除2.1 函數介紹2.1.1 創建動態任務xTaskCreate()2.1.2 創建靜態任務…

LVGL(lv_bar進度條)

文章目錄 一、lv_bar 是什么?二、基本使用創建一個進度條設置進度值 三、條形方向與填充方向四、范圍模式(Range)五、事件處理(可選)六、自定義樣式(可選)七、綜合示例八、配合 lv_timer 或外部…

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(查看操作)…