LVGL 的事件響應, 按鍵

在LVGL中,所有控件都能夠響應事件,但并非所有控件默認都會有預設的事件響應行為。LVGL的設計允許用戶為任何控件添加事件處理函數,以響應各種用戶交互,例如點擊、長按、拖動等。這意味著,雖然控件本身具備響應事件的能力,但具體的響應行為(即當發生某個事件時執行什么操作)需要用戶根據具體需求來定義。

控件的事件響應

  • 預設事件響應:一些控件,如按鈕(lv_btn),在創建時就已經具備了基本的事件響應能力,例如點擊(LV_EVENT_CLICKED)和釋放(LV_EVENT_RELEASED)事件。這是因為這些控件的常用用途包括觸發特定的動作,因此LVGL為它們提供了默認的事件響應機制。
  • 自定義事件響應:對于大多數控件來說,如果你想要它們響應特定事件(如觸摸、按下、釋放、拖動等),你需要手動添加事件處理函數。這包括為控件添加事件監聽器,并在事件發生時執行預定義的回調函數。

編碼器的按鍵響應事件

編碼器(旋轉編碼器)是LVGL中的一種輸入設備,它可以用于導航和交互,特別是在沒有觸摸屏的嵌入式設備中。編碼器通常具有兩個主要功能:旋轉和按下。為了使編碼器的按鍵響應事件生效,需要滿足以下條件:

  1. 配置輸入設備:首先,需要在LVGL中正確配置編碼器作為輸入設備,包括設置其類型為LV_INDEV_TYPE_ENCODER并提供一個讀取函數來獲取編碼器的狀態。

  2. 事件處理函數:必須為需要響應編碼器操作的控件或對象注冊事件處理函數。例如,如果你希望一個按鈕控件能夠響應編碼器的按鍵事件,你需要為該按鈕添加一個處理LV_EVENT_CLICKED的事件處理函數。

  3. 全局或對象級別的事件監聽:你可以在全局范圍內監聽編碼器事件,以實現全局的導航邏輯,或者你可以為特定控件注冊事件處理函數,以實現更細粒度的交互。

示例:配置編碼器并添加事件處理

以下是配置編碼器和添加按鍵響應事件處理函數的簡化示例:

// 編碼器讀取函數
bool encoder_read(lv_indev_drv_t * drv, lv_indev_data_t*data) {// 實現編碼器狀態的讀取,例如旋轉和按鍵狀態// data->enc_diff = 旋轉差值;// data->state = 按鍵狀態(LV_INDEV_STATE_PRESSED / LV_INDEV_STATE_RELEASED)return false; // 沒有讀取到數據時返回false
}// 事件處理函數
void event_handler(lv_event_t * e) {lv_event_code_t code = lv_event_get_code(e);lv_obj_t * obj = lv_event_get_target(e);if(code == LV_EVENT_CLICKED) {// 處理點擊事件}
}// 配置編碼器
void setup_encoder(void) {lv_indev_drv_t indev_drv;lv_indev_drv_init(&indev_drv);indev_drv.type = LV_INDEV_TYPE_ENCODER;indev_drv.read_cb = encoder_read;lv_indev_t * encoder_indev = lv_indev_drv_register(&indev_drv);// 為特定控件添加事件監聽lv_obj_t * btn = lv_btn_create(lv_scr_act()); // 創建一個按鈕lv_obj_add_event_cb(btn, event_handler, LV_EVENT_ALL, NULL); // 為按鈕添加事件處理函數
}

?

在這個示例中,首先通過encoder_read函數獲取編碼器的狀態,然后通過event_handler函數為控件(例如按鈕)處理事件。通過這種方式,你可以為LVGL中的任何控件添加編碼器的按鍵響應事件。

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

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

相關文章

同源不同頁面之間的通信,SharedWorker使用

同源不同頁面之間的通信,SharedWorker使用 描述實現結果 描述 同源不同頁面之間的通信,使用SharedWorker,或者使用全局方法通信,這里使用SharedWorker來實現 mdn地址:https://developer.mozilla.org/zh-CN/docs/Web/A…

JAVA學習-類和接口.類和面向對象

一、Java中的類和接口是面向對象編程的重要概念。 1. 類是一種模板或藍圖,用于創建具有相同屬性和行為的對象。類定義了對象的屬性(成員變量)和行為(方法)。在程序中,可以通過實例化類來創建對象&#xff…

Odoo邁入開源第一低代碼開發平臺的重要里程碑

Odoo17的正式發布已經過去好幾個月了,通過一段時間的運用,最大的感觸就是,Odoo會成為企業管理軟件低代碼開發平臺的重要一員,而V17則會成為這個過程中具有里程碑意義的版本。 時隔四個月,讓我們回頭來看看Odoo17帶來的…

基YOLOV5實現的AI智能盒子

基于yolov5實現的AI智能盒子框架 開發背景技術實現產品效果源碼預覽功能介紹 2021-2023是沉淀的幾年,經濟不景氣,各行各業都不太好混,所以這幾年也沒有太多心思花在csdn上為各大網友寫一些技術文章,2024年初,也算是給自…

光柵化算法

多數計算機圖形圖像,是通過光柵顯像顯示給用戶的,這種系統將圖像作為像素陣列進行顯示,像素(pixel)即圖像元素(picture element)的簡稱。這些像素采用RGB顏色空間。本文討論光柵顯像的基本原理&…

藍牙耳機哪個好用性價比高?2024熱銷藍牙耳機大測評!選購不焦慮

?近年來,藍牙耳機已經成為了一個非常熱門的選擇,不僅因為它們小巧便捷,還因為它們的防水性能、音質和佩戴體驗已經逐漸超越了有線耳機。隨著越來越多的品牌加入藍牙耳機的市場競爭,各種類型的藍牙耳機層出不窮。特別是對于運動愛…

2024年全國乙卷高考理科數學備考:十年選擇題真題和解析

今天距離2024年高考還有三個多月的時間,今天我們來看一下2014~2023年全國乙卷高考理科數學的選擇題,從過去十年的真題中隨機抽取5道題,并且提供解析。后附六分成長獨家制作的在線練習集,科學、高效地反復刷這些真題,吃…

GEE數據集——GLC_FCS30D - 全球 30 米土地覆被變化數據集(1985-2022 年)

GLC_FCS30D - 全球 30 米土地覆被變化數據集(1985-2022 年) 注 本數據集是正在提交的論文的一部分,因此沒有引用和 DOI 信息。請在使用本數據集時注意這一點。 GLC_FCS30D 數據集是全球土地覆被監測領域的一項開創性進展,它以 30…

SpringBoot 整合WebService

文章目錄 WebService1.簡單介紹WebService1.1. 類型1.2. 架構1.3. 主要特點1.4. 使用場景1.5. Web服務標準和技術 2.案例-WebServiceDemo2.1.引入配置文件2.2.創建接口2.3.創建接口實現類2.4.創建WebService配置類2.5.測試 WebService Web服務(Web Services&#xf…

2024年騰訊云優惠券/代金券領取三個方法整理(收藏級)

騰訊云代金券領取渠道有哪些?騰訊云官網可以領取、官方媒體賬號可以領取代金券、完成任務可以領取代金券,大家也可以在騰訊云百科蹲守代金券,因為騰訊云代金券領取渠道比較分散,騰訊云百科txybk.com專注匯總優惠代金券領取頁面&am…

CentOS系統上安裝幻獸帕魯/Palworld服務端的詳細步驟是什么?

CentOS系統上安裝幻獸帕魯/Palworld服務端的詳細步驟是什么? 首先,需要確認Docker是否已經安裝。如果未安裝,則需要進行安裝。接下來,運行Docker容器。這一步是為了創建一個可以運行幻獸帕魯服務端的環境。然后,在容器…

民爆5G智能制造工廠數字孿生可視化平臺,推進民爆工業數字化轉型

民爆5G工廠智能制造數字孿生可視化平臺,推進行業數字化轉型。民爆行業作為國家經濟發展的重要支柱產業,其數字化轉型對于提高生產效率、降低成本、保障安全等方面具有重要意義。而民爆5G工廠智能制造數字孿生可視化平臺正是推進行業數字化轉型的關鍵技術…

Flutter中Future和Stream關系

Future和Stream類是Dart異步編程的核心。 Future 表示一個不會立即完成的計算過程。與普通函數直接返回結果不同的是異步函數返回一個將會包含結果的 Future。該 Future 會在結果準備好時通知調用者。 Stream 是一系列異步事件的序列。其類似于一個異步的 Iterable,…

AutoEncoder和 Denoising AutoEncoder學習筆記

參考: 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 寫在前面: 只是直覺上的認識,并沒有數學推導。后面會寫一篇(抄)大一統文章(概率角度理解為什么AE要選擇MSE Loss) TOC 1 Au…

1907_Arm Cortex-M3的基本了解

1907_Arm Cortex-M3的基本了解 全部學習匯總: g_arm_cores: ARM內核的學習筆記 (gitee.com) 我發現Arm Coretex-M3有一個專門的DataSheet,看起來這個的確是被當做了一個設計的產品來對待的。正好,基于這個文件來看看M3具備哪些基本的特性&…

GO—變量

Go語言是靜態類型語言,因此變量(variable)是有明確類型的,編譯器也會檢查變量類型的正確性。 我們從計算機系統的角度來講,變量就是一段或者多段內存,用于存儲數據 1.1 標準格式 var 變量名 變量類型 1 …

vue 使用vue-scroller 列表滑動到底部加載更多數據

安裝插件 npm install vue-scroller -dmain.js import VueScroller from vue-scroller Vue.use(VueScroller)<template><div class"wrap"><div class"footer"><div class"btn" click"open true">新增</d…

多層控制上身姿態的方法

1選擇要施加的clip并調出層控制窗口 2點選motion層控制 3選擇并復制pose&#xff08;注意在哪個層中選中的情況下復制的是那個層中的pose&#xff09; 4在新建層中分別選擇頭幀粘貼pose和尾幀粘貼pose因是上半身&#xff0c;因此mask中把下半身去掉即變灰

提升工作能力的方法

1.接受工作&#xff0c;只問標準 2.請示工作&#xff0c;必帶方案&#xff1b; 3.匯報工作&#xff0c;突出成果&#xff1b; 4.分享工作&#xff0c;細說流程&#xff1b; 5.復盤工作&#xff0c;總結SOP 如果能這么做&#xff0c;那將是一個非常通透的高手&#xff0c;所以高…

如何使用 takeUntil RxJS 操作符來聲明性地管理訂閱

簡介 Angular 處理取消訂閱可觀察對象的操作&#xff0c;比如從 HTTP 服務返回的可觀察對象或者使用 async 管道時。然而&#xff0c;對于其他情況&#xff0c;管理所有訂閱并確保取消長期存在的訂閱可能會變得困難。而且&#xff0c;取消大部分訂閱的策略也會帶來自己的問題。…