当前位置: 首页 > news >正文

LVGL(lv_btn按键类)

文章目录

    • 一、基本概念
      • 继承结构:
    • 二、创建一个按钮的基本流程
    • 三、响应按钮事件
    • 四、自定义按钮外观
    • 五、按钮类型(模式)
    • 六、综合示例
    • 七、按钮和输入设备的关系


lv_btn 是 LVGL(Light and Versatile Graphics Library)中最常用的控件之一,用于创建按钮(Button)。它是 lv_obj 的子类,继承了对象的一切特性,并在此基础上提供了更多交互性,比如点击、按下、释放等事件响应。


一、基本概念

在 LVGL 中,按钮本质上就是一个可响应事件的容器,你可以在按钮里放入 标签(lv_label图标动画元素等。

继承结构:

lv_obj└── lv_btn

二、创建一个按钮的基本流程

lv_obj_t *btn = lv_btn_create(lv_scr_act());   // 在当前屏幕创建按钮
lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0);      // 居中显示// 给按钮添加一个标签
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "点击我");

三、响应按钮事件

按钮的主要特点是响应用户的触控操作,比如“按下”、“释放”、“长按”等。可以通过注册事件回调函数处理:

void btn_event_cb(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);if(code == LV_EVENT_CLICKED) {printf("按钮被点击了!\n");}
}lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL, NULL);

常用事件包括:

事件名称含义
LV_EVENT_PRESSED按钮被按下
LV_EVENT_RELEASED按钮被释放
LV_EVENT_CLICKED按钮被点击(按下+释放)
LV_EVENT_LONG_PRESSED按下后长时间未松开

四、自定义按钮外观

你可以通过样式 lv_style_t 来设置按钮的颜色、边框、圆角、动画等:

static lv_style_t style;
lv_style_init(&style);
lv_style_set_radius(&style, 10);
lv_style_set_bg_color(&style, lv_color_hex(0x3498db));
lv_style_set_border_width(&style, 2);lv_obj_add_style(btn, &style, 0);

还可以通过状态改变不同的样式:

lv_style_set_bg_color(&style, lv_color_hex(0x2980b9));  // 按下状态
lv_obj_add_style(btn, &style, LV_STATE_PRESSED);

五、按钮类型(模式)

在早期版本(如 v7)中按钮有 toggle 模式(开关模式),可以实现开/关状态切换。到了 LVGL v8 中,这种模式用 状态 来管理:

lv_obj_add_state(btn, LV_STATE_CHECKED); // 设置为选中状态
lv_obj_clear_state(btn, LV_STATE_CHECKED); // 清除选中状态

六、综合示例

void my_btn_event_cb(lv_event_t * e)
{if(lv_event_get_code(e) == LV_EVENT_CLICKED) {printf("你点击了按钮!\n");}
}void create_my_button(void)
{lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_center(btn);lv_obj_add_event_cb(btn, my_btn_event_cb, LV_EVENT_CLICKED, NULL);lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, "Hello");
}

七、按钮和输入设备的关系

lv_btn 与 LVGL 的输入设备驱动(如触摸屏、鼠标)紧密相关。用户按下屏幕,LVGL 会派发 LV_EVENT_PRESSED 等事件给按钮对象。因此,要让按钮响应事件,必须正确配置 输入设备驱动(如 lv_indev_drv_t)。


http://www.dtcms.com/a/184271.html

相关文章:

  • 游戏引擎学习第271天:生成可行走的点
  • CTFd CSRF 校验模块解读
  • Java 中 AQS 的实现原理
  • 深入理解设计模式之原型模式(Prototype Pattern)
  • 复现nn-Unet模型 实验报告
  • 【我的创作纪念日】512
  • 编程日志5.3
  • Day21打卡—常见降维算法
  • 免安装 + 快速响应Photoshop CS6 精简版低配置电脑修图
  • Linux PCI 驱动开发指南
  • AI日报 · 2025年05月11日|传闻 OpenAI 考虑推出 ChatGPT “永久”订阅模式
  • 【React中useRef钩子详解】
  • 【数据结构入门训练DAY-31】组合的输出
  • 【音视频工具】MP4BOX使用
  • k8s 资源对比总结
  • 通过 Azure DevOps 探索 Helm 和 Azure AKS
  • istio in action之应用弹性与容错机制
  • 理解页内碎片与页外碎片:分页存储管理的关键问题
  • 长短期记忆网络(LSTM)深度解析:从理论到实践的全方位指南
  • 23、DeepSeek-V2论文笔记
  • LangGraph框架中针对MCP协议的变更-20250510
  • YOLOv2框架深度解析
  • Go语言实现优雅关机和重启的示例
  • 九、STM32入门学习之WIFI模块(ESP32C3)
  • TIME - MoE 模型代码 4——Time-MoE-main/run_eval.py
  • 图形化编程革命:iVX携手AI 原生开发范式
  • MNIST 数据并行 Data Parallel - DP
  • 【目标检测系列】YOLOV1解读
  • Go语言实现豆瓣电影Top250爬虫
  • 掌握 void 类型在函数返回值中的应用