LVGL- 按鈕矩陣控件

1 按鈕矩陣控件

lv_btnmatrix 是 LVGL(Light and Versatile Graphics Library) v8 中提供的一個非常實用的控件,用于創建帶有多個按鈕的矩陣布局。它常用于實現虛擬鍵盤、數字鍵盤、操作面板、選擇菜單等場景,特別適用于嵌入式設備、觸摸屏等界面。

1.1 功能與特點

lv_btnmatrix 控件的主要功能是展示多個按鈕,并提供靈活的布局與交互方式。它的特點包括:

動態布局:按鈕布局可以根據需求進行調整,可以顯示任意大小和排列方式的按鈕。

支持事件回調:按鈕矩陣支持綁定事件回調,用戶可以在按鈕被點擊時執行特定的操作。

支持按鈕樣式設置:每個按鈕的樣式可以通過 LVGL 的樣式機制進行靈活定制,例如字體、顏色、邊框、背景等。

1.2 基本結構與工作原理

lv_btnmatrix 是由一組按鈕構成的矩陣,其中每個按鈕都可以被單獨配置和控制。按鈕矩陣在實際應用中表現為一組具有相同樣式和布局的按鈕,可以通過行和列來定義按鈕的位置。

1.3 應用場景

虛擬鍵盤:創建數字鍵盤、字符鍵盤等輸入設備。

控制面板:用于展示一組操作按鈕,如家電控制面板。

選擇菜單:實現多選項的選擇界面。

2 使用 lv_btnmatrix 的基本步驟:

  1. 創建按鈕矩陣對象: 使用 lv_btnmatrix_create 函數來創建按鈕矩陣控件。

  2. 設置按鈕文本:使用 lv_btnmatrix_set_map 函數來設置按鈕的文本布局,可以通過這個函數定義每個按鈕的標簽。

  3. 設置按鈕行為:你可以通過事件回調函數來處理按鈕的點擊事件。

2.1 創建按鈕矩陣

創建一個按鈕矩陣對象通常使用 lv_btnmatrix_create() 函數。該函數需要指定父對象,一般情況下,父對象是屏幕對象(lv_scr_act()),表示該控件將在當前顯示的屏幕上顯示。

    lv_obj_t* btnm = lv_btnmatrix_create(lv_scr_act());

在這里插入圖片描述

2.2 設置按鈕文本和布局

按鈕矩陣最核心的功能之一是設置按鈕的文本。按鈕的文本布局是通過 lv_btnmatrix_set_map() 函數進行設置的。這個函數使用一個字符串映射(類似于字符數組)來定義按鈕的文本,并且支持多行布局。

2.2.1 設置

void lv_btnmatrix_set_map(lv_obj_t * btnm, const char ** map);

btnm:按鈕矩陣對象,通常是通過 lv_btnmatrix_create() 創建的按鈕矩陣對象。

map:一個指向字符指針數組的指針,每個字符指針數組元素表示按鈕矩陣中的一行按鈕文本。每個數組元素中的文本可以通過空格分隔按鈕。

2.2.2 案例

    static const char* map[] ={"1", "2", "3", "4", "5", "\n","6", "7", "8", "9", "0", "\n","ok", "cancel", ""};lv_btnmatrix_set_map(btnm, map);

在這里插入圖片描述

2.3 設置顏色和位置

static lv_style_t style;
lv_style_init(&style);
lv_style_set_bg_color(&style, lv_color_hex(0x003366));      // 背景色:深藍色
lv_style_set_border_color(&style, lv_color_hex(0xffffff));   // 邊框顏色:白色
lv_style_set_text_color(&style, lv_color_hex(0xffffff));     // 文字顏色:白色lv_obj_add_style(btnm, &style, 0);  // 將樣式應用到按鈕矩陣lv_obj_set_size(btnm, 300, 150);                  // 設置控件尺寸
lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0);  // 將按鈕矩陣居中顯示

在這里插入圖片描述

2.4 事件處理

按鈕矩陣支持事件處理,通常用于響應用戶點擊某個按鈕時的操作。可以為按鈕矩陣添加事件回調函數,例如,當按鈕狀態變化時觸發的 LV_EVENT_VALUE_CHANGED 事件。

static void btnm_event_handler(lv_event_t* e)
{lv_obj_t* btn = lv_event_get_target(e);  // 獲取被點擊的按鈕對象uint32_t id = lv_btnmatrix_get_selected_btn(btn);const char* text = lv_btnmatrix_get_btn_text(btn, id);  // 獲取按鈕的文本LV_LOG("按鈕 %s 被點擊\n", text);
}lv_obj_add_event_cb(btnm, btnm_event_handler, LV_EVENT_VALUE_CHANGED, NULL);

在這里插入圖片描述

2.5 選中或者可選

void lv_btnmatrix_set_btn_ctrl(lv_obj_t *btnm, uint16_t btn_id, lv_btnmatrix_ctrl_t ctrl);

在這里插入圖片描述

lv_btnmatrix_set_btn_ctrl(btnm, 10, LV_BTNMATRIX_CTRL_CHECKABLE);  //  ok 可以選中
lv_btnmatrix_set_btn_ctrl(btnm, 11, LV_BTNMATRIX_CTRL_CHECKED);   // cancel 選中

在這里插入圖片描述

檢查哪個按鍵是否被按下

if (lv_btnmatrix_has_btn_ctrl(btn, 10, LV_BTNMATRIX_CTRL_CHECKED)) {LV_LOG("按鈕 %s 被點擊\n", "OK");
}

2.6 修改內部按鍵的風格

static lv_style_t style_btn;
lv_style_init(&style_btn);
lv_style_set_radius(&style_btn,10);
lv_style_set_border_width(&style_btn, 1);
lv_style_set_border_opa(&style_btn, LV_OPA_COVER);
lv_style_set_border_color(&style_btn, lv_palette_main(LV_PALETTE_RED));
lv_style_set_border_side(&style_btn, LV_BORDER_SIDE_INTERNAL);
lv_style_set_bg_color(&style_btn, lv_palette_main(LV_PALETTE_RED));
lv_style_set_text_color(&style_btn, lv_palette_main(LV_PALETTE_YELLOW));
lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS);

在這里插入圖片描述

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

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

相關文章

excel 批量導出圖片并指定命名

一、開發環境 打開excel文件中的宏編輯器和JS代碼調試 工具-》開發工具-》WPS宏編輯器 左邊是工程區,當打開多個excel時會有多個,要注意不要把代碼寫到其他工作簿去了 右邊是代碼區 二、編寫代碼 宏是js語言,因此變量或者方法可以網上搜…

yolov5基礎--yolov5源碼閱讀(common.py)

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒…

5.0.5 變換(旋轉、縮放、扭曲)

WPF變換可以產生特殊效果,如平移、旋轉、扭曲。 變換類 描述TranslateTransform沿著X軸和Y軸平移ScaleTransform 沿著定義的中心點縮放RotateTransform沿著定義的中心點旋轉SkewTransform 扭曲元素MatrixTransfrom提供3x3矩陣,用于定義一個自定義變換 1…

如何設置內網映射端口到外網訪問?哪些軟件可以進行端口映射?

大多數時候我們所使用的服務器都是在內網搭建的,而且內網是可以訪問外網的,但外網是沒法直接訪問內網IP和端口服務的。也就是說外網無法直接訪問到內網的網絡地址,需要大家去搭建一個內外網互通的橋梁,把內網服務器指定端口映射到…

養生:塑造健康生活的良方

養生是一場貫穿生活的自我關愛行動,從飲食、運動、睡眠到心態調節,每一個環節都對健康有著深遠影響。以下為你帶來全面且實用的養生策略。 飲食養生:科學搭配,呵護腸胃 合理規劃三餐,遵循 “早營養、午均衡、晚清淡”…

YOLOv12云端GPU谷歌免費版訓練模型

1.效果 2.打開 https://colab.research.google.com/?utm_sourcescs-index 3.上傳代碼 4.解壓 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.進入yolov12-main目錄 %cd /content/yolov12-main/yolov12-main 6.安裝依賴庫 !pip install -r requirements.…

機器人手臂的坐標變換:一步步計算齊次矩陣過程 [特殊字符]

大家好!今天我們來學習如何計算機器人手臂的坐標變換。別擔心,我會用最簡單的方式解釋這個過程,就像搭積木一樣簡單! 一、理解問題 我們有一個機器人手臂,由多個關節組成。每個關節都有自己的坐標系,我們需要計算從世界坐標系(W)到末端執行器(P?)的完整變換。 二、已…

CSS中的@import指令

一、什么是import指令&#xff1f; import 是CSS提供的一種引入外部樣式表的方式&#xff0c;允許開發者在CSS文件中引入其他CSS文件&#xff0c;或者在HTML的<style>標簽中引入外部樣式。與常見的<link>標簽相比&#xff0c;import 提供了一種更“CSS原生”的樣式…

[學成在線]23-面試題總結

1. 詳細說說你的項目吧 從以下幾個方面進行項目介紹: 項目的背景&#xff0c;包括: 是自研還是外包、什么業務、服務的客戶群是誰、誰去運營等問題。項目的業務流程項目的功能模塊項目的技術架構個人工作職責個人負責模塊的詳細說明&#xff0c;包括模塊的設計&#xff0c;所…

C++編程語言:標準庫:標準庫概觀(Bjarne Stroustrup)

第30章 標準庫概觀(Standard-Library Overview) 目錄 30.1 引言 30.1.1 標準庫設施 30.1.2 設計約束 30.1.3 描述風格 30.2 頭文件 30.3 語言支持 30.3.1 對initializer_list的支持 30.3.2 對范圍for的支持 30.4 異常處理 30.4.1 異常 30.4.1…

spring5.x講解介紹

Spring 5.x 是 Spring Framework 的重要版本升級&#xff0c;全面擁抱現代 Java 技術棧&#xff0c;其核心改進涵蓋響應式編程、Java 8支持、性能優化及開發模式創新。以下從特性、架構和應用場景三個維度詳細解析&#xff1a; 一、核心特性與架構改進 Java 8 全面支持 Spring …

【C++進階】第2課—多態

文章目錄 1. 認識多態2. 多態的定義和實現2.1 構成多態的必要條件2.2 虛函數2.3 虛函數的重寫或覆蓋2.4 協變(了解)2.5 析構函數的重寫2.6 override和final關鍵字2.7 重載、重寫、隱藏對比 3. 純虛函數和抽象類4. 多態原理4.1 虛函數表指針4.2 多態的實現4.3 靜態綁定和動態綁定…

Dive into LVGL (1) —— How LVGL works from top to down

0.briefly speaking 由于工作原因&#xff0c;最近開始接觸到一些圖形圖像處理相關的知識&#xff0c;在這個過程中逐漸接觸到了LVGL。作為一個開源的圖形庫&#xff0c;LVGL可以高效地為MCU、MPU等嵌入式設備構建美觀的UI界面。我的手頭也正好有一塊集成了Vivante 2.5D GPU的…

【HarmonyOS 5】鴻蒙中進度條的使用詳解

【HarmonyOS 5】鴻蒙中進度條的使用詳解 一、HarmonyOS中Progress進度條的類型 HarmonyOS的ArkUI框架為開發者提供了多種類型的進度條&#xff0c;每種類型都有其獨特的樣式&#xff0c;以滿足不同的設計需求。以下是幾種常見的進度條類型&#xff1a; 線性進度條&#xff08;…

OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——gmp

準備工作 請依照這篇文章搭建環境 OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——環境配置_openharmony交叉編譯-CSDN博客 下載 wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 解壓 tar -xf gmp-6.3.0.tar.xzcd gmp-6.3.0/ 環境變量 e…

量化交易策略的運行

? 什么是“策略的運行”&#xff1f; 在量化交易系統中&#xff0c;“策略的運行”并不一定意味著“每個策略對應一個線程”&#xff0c;但在大多數實際實現中&#xff0c;確實會使用線程、任務、協程或進程等形式來實現每個策略的獨立調度與執行。 “運行”意味著策略開始生…

開平機:從原理到實踐的全面技術剖析

一、開平機核心模塊技術解析 1. 校平輥系的力學建模與輥型設計 校平機精度核心在于輥系設計&#xff0c;需通過彈塑性力學模型計算變形量。典型校平輥配置參數&#xff1a; 輥徑比&#xff1a;校平輥直徑&#xff08;D&#xff09;與板材厚度&#xff08;t&#xff09;需滿足…

2、實驗室測控系統 - /自動化與控制組件/lab-monitoring-system

76個工業組件庫示例匯總 實驗室測控系統開發組件 這是一個專為實驗室設備數據采集與分析設計的可視化測控系統組件。采用工業風格界面設計&#xff0c;提供了豐富的動態數據展示與分析功能&#xff0c;可應用于各類實驗室環境中的設備監控和數據處理。 功能特點 多設備管理…

在 Kotlin 中什么是委托屬性,簡要說說其使用場景和原理

在 Kotlin 中&#xff0c;屬性委托和類委托是兩種通過 by 關鍵字實現的強大特性&#xff0c;它們通過“委托”機制將行為或實現邏輯委托給其他對象&#xff0c;從而實現代碼的復用和解耦。 1 屬性委托 定義&#xff1a; 允許把屬性的 get 和 set 方法的具體實現委托給另一個對…

AI星智協腦:智能驅動的高效協作管理平臺全解讀

前言 想象一下&#xff1a;早上剛開電腦&#xff0c;十幾條未讀消息如機關槍般掃射而來&#xff0c;各路任務像隕石雨一樣砸向你&#xff0c;會議排得比熱播劇還密集&#xff0c;文檔版本堪比宮斗劇劇情反轉&#xff0c;同事圍著你轉圈追KPI&#xff0c;活脫脫一場《職場大逃殺…