LVGL 之 Button 应用

关键字 :NXPLVGLButton

 一、概述

1.1 Button 简介

按钮源自 lv_cont 容器,是简单的矩形对象,也是比较常见的控件。

二、Button 基础知识

2.1 Button 状态

  • LV_BTN_STATE_RELEASED : 按钮的正常释放状态
  • LV_BTN_STATE_PRESSED : 按钮的正常按下状态
  • LV_BTN_STATE_CHECKED_RELEASED : 按钮的切换释放状态
  • LV_BTN_STATE_CHECKED_PRESSED : 按钮的切换按下状态
  • LV_BTN_STATE_DISABLED : 按钮的禁用无效状态
  • LV_BTN_STATE_CHECKED_DISABLED : 按钮的切换禁用状态

我们可以调用 lv_btn_get_state(btn) 来获取按钮的状态,返回值为以上之一,如果需要更精确的状态描述(例如聚焦),可以使用 obj 通用函数 lv_obj_get_state(btn)。手动更改按钮的状态可以通过调用函数 lv_btn_set_state(btn, LV_BTN_STATE_…) 实现。

2.2 Button 是否可切换( Checkable )

可以使用 lv_btn_set_checkable(btn, true) 将按钮配置为切换按钮,在这种情况下,单击时,按钮自动转到 LV_STATE_CHECKED 状态,或者再次单击时返回原状态。

(1)这里的切换类似于 toggle 取反,比如,默认按键(非切换按键)的点击过程按键状态是这样的:

默认 ( LV_BTN_STATE_RELEASED ) -> 按下 ( LV_BTN_STATE_PRESSED ) -> 松开( LV_BTN_STATE_RELEASED )

(2)若给此按键启用切换状态,则按键的点击过程按键状态是这样的:

① 起始状态为正常态,即 LV_BTN_STATE_RELEASED

默认 ( LV_BTN_STATE_RELEASED ) -> 按下 ( LV_BTN_STATE_PRESSED ) -> 松开 ( LV_BTN_STATE_CHECKED_RELEASED )

② 起始状态为起始状态为切换态,即LV_BTN_STATE_CHECKED_RELEASED

默认 ( LV_BTN_STATE_CHECKED_RELEASED) -> 按下 ( LV_BTN_STATE_CHECKED_PRESSED ) -> 松开( LV_BTN_STATE_RELEASED )

 

2.3 Events 事件

除了通用事件,还有特殊事件 LV_EVENT_VALUE_CHANGED 是由按钮发送的。

  • LV_EVENT_PRESSED : 对象已按下
  • LV_EVENT_SHORT_CLICKED : 短的点击
  • LV_EVENT_CLICKED : 点击
  • LV_EVENT_LONG_PRESSED : 长按
  • LV_EVENT_LONG_PRESSED_REPEAT : 重复长按
  • LV_EVENT_RELEASED : 释放
  • LV_EVENT_VALUE_CHANGED : 值改变


三、Button 应用

#include "../../../lv_examples.h"
#include
#if LV_USE_BTN

static void event_handler(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_CLICKED)
{
printf("Clicked\n");
}
else if(event == LV_EVENT_VALUE_CHANGED)
{
printf("Toggled\n");
}
}

void lv_ex_btn_1(void)
{
lv_obj_t * label;

lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL);
lv_obj_set_event_cb(btn1, event_handler);
lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, -40);

label = lv_label_create(btn1, NULL);
lv_label_set_text(label, "Button");

lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), NULL);
lv_obj_set_event_cb(btn2, event_handler);
lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 40);
lv_btn_set_checkable(btn2, true);
lv_btn_toggle(btn2);
lv_btn_set_fit2(btn2, LV_FIT_NONE, LV_FIT_TIGHT);

label = lv_label_create(btn2, NULL);
lv_label_set_text(label, "Toggled");
}
#endif

 

Button 的简单应用如上,运行效果如下图所示,也可以去 LVGL 官网看看: https://lvgl.io/


图 1. 按键应用

 

四、参考资料

(1)LVGL 官方文档 :

https://docs.lvgl.io/7.11/overview/object.html

(2)正点原子 手把手教你学 LittleVGL :

http://www.openedv.com/docs/book-videos/zdyzshipin/4free/littleVGL.html

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★博文作者未开放评论功能