当前位置: 首页 > 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)。


相关文章:

  • 游戏引擎学习第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论文笔记
  • 27岁杨阳拟任苏木镇党委副职,系2020年内蒙古自治区选调生
  • 李公明 | 一周画记:印巴交火会否升级为第四次印巴战争?
  • 时代中国控股:前4个月销售额18.1亿元,境外债重组协议押后聆讯至5月底
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 秦洪看盘|交易型资金收缩,释放短线压力
  • 北外滩集团21.6亿元摘上海虹口地块,为《酱园弄》取景地