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.mzph.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;取消大部分订阅的策略也会带来自己的问题。…