芯课堂 | LVGL基础知识(四)

news2024/9/22 19:32:44

概述

LVGL按钮是简单的矩形对象。它们源自容器,因此也可以提供布局和配合。此外,可以启用它以在单击时自动进入检查状态。

LVGL按钮讲解

零件和样式

这些按钮仅具有一种主要样式,称为 LV_BTN_PART_MAIN ,并且可以使用以下组中的所有属性:

•背景(background)

•边界(border)

•边框(outline)

•阴影(shadow)

•数值(value)

•模式(pattern)

•过渡(transitions)

启用布局或适合时,它还将使用padding属性。

 

用法

获取按钮状态

为了简化按钮的使用,可以使用 lv_btn_get_state(btn) 来获取按钮的状态。它返回以下值之一:

•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_set_state(btn, LV_BTN_STATE_...) 可以手动更改按钮状态。

如果需要状态的更精确描述(例如,重点突出),则可以使用常规 lv_obj_get_state(btn) 。

可检查

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

布局和适配

与容器类似,按钮也具有布局和适合属性。

lv_btn_set_layout(btn, LV_LAYOUT_...) 设置布局。默认值为 LV_LAYOUT_CENTER 。因此,如果添加标签,则标签将自动与中间对齐,并且无法通过 lv_obj_set_pos() 移动。您可以使用 lv_btn_set_layout(btn, LV_LAYOUT_OFF) 禁用布局。

lv_btn_set_fit/fit2/fit4(btn, LV_FIT_..) 允许根据子代,父代和适合类型自动设置按钮的宽度和/或高度。

事件

除了 通用事件 外,按钮还发送以下特殊事件:

·        LV_EVENT_VALUE_CHANGED-切换按钮时发送。

了解有关 事件 的更多信息。

按键

以下按键由按钮处理:

·        LV_KEY_RIGHT/UP-如果启用了切换,则进入切换状态。

·        LV_KEY_LEFT/DOWN-如果启用了切换,则进入非切换状态。

请注意, LV_KEY_ENTER 的状态已转换为 LV_EVENT_PRESSED/PRESSING/RELEASED 等。

进一步了解 按键 。

范例

简单的按钮

图片

创建两个简单的按钮

上述效果的示例代码:

#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");

}

按钮样式

图片

按钮样式

上述效果的示例代码:

 #include "../../../lv_examples.h"

 #include

 #if LV_USE_BTN

 /**

  * Advanced button transition examples

  */

 void lv_ex_btn_2(void)

 {

static lv_anim_path_t path_overshoot;

lv_anim_path_init(&path_overshoot);

lv_anim_path_set_cb(&path_overshoot, lv_anim_path_overshoot);

static lv_anim_path_t path_ease_out;

lv_anim_path_init(&path_ease_out);

lv_anim_path_set_cb(&path_ease_out, lv_anim_path_ease_out);

static lv_anim_path_t path_ease_in_out;

lv_anim_path_init(&path_ease_in_out);

lv_anim_path_set_cb(&path_ease_in_out, lv_anim_path_ease_in_out);

/*Gum-like button*/

static lv_style_t style_gum;

lv_style_init(&style_gum);

lv_style_set_transform_width(&style_gum, LV_STATE_PRESSED, 10);

lv_style_set_transform_height(&style_gum, LV_STATE_PRESSED, -10);

lv_style_set_value_letter_space(&style_gum, LV_STATE_PRESSED, 5);

lv_style_set_transition_path(&style_gum, LV_STATE_DEFAULT, &path_overshoot);

lv_style_set_transition_path(&style_gum, LV_STATE_PRESSED, &path_ease_in_out);

lv_style_set_transition_time(&style_gum, LV_STATE_DEFAULT, 250);

lv_style_set_transition_delay(&style_gum, LV_STATE_DEFAULT, 100);

lv_style_set_transition_prop_1(&style_gum, LV_STATE_DEFAULT, LV_STYLE_TRANSFORM_WIDTH);

lv_style_set_transition_prop_2(&style_gum, LV_STATE_DEFAULT, LV_STYLE_TRANSFORM_HEIGHT);

lv_style_set_transition_prop_3(&style_gum, LV_STATE_DEFAULT, LV_STYLE_VALUE_LETTER_SPACE);

lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL);

lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, -80);

lv_obj_add_style(btn1, LV_BTN_PART_MAIN, &style_gum);

/*Instead of creating a label add a values string*/

lv_obj_set_style_local_value_str(btn1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Gum");

 /*Halo on press*/

static lv_style_t style_halo;

lv_style_init(&style_halo);

lv_style_set_transition_time(&style_halo, LV_STATE_PRESSED, 400);

lv_style_set_transition_time(&style_halo, LV_STATE_DEFAULT, 0);

lv_style_set_transition_delay(&style_halo, LV_STATE_DEFAULT, 200);

lv_style_set_outline_width(&style_halo, LV_STATE_DEFAULT, 0);

lv_style_set_outline_width(&style_halo, LV_STATE_PRESSED, 20);

lv_style_set_outline_opa(&style_halo, LV_STATE_DEFAULT, LV_OPA_COVER);

lv_style_set_outline_opa(&style_halo, LV_STATE_FOCUSED, LV_OPA_COVER);   /*Just to be sure, the theme might use it*/

lv_style_set_outline_opa(&style_halo, LV_STATE_PRESSED, LV_OPA_TRANSP);

lv_style_set_transition_prop_1(&style_halo, LV_STATE_DEFAULT, LV_STYLE_OUTLINE_OPA);

lv_style_set_transition_prop_2(&style_halo, LV_STATE_DEFAULT, LV_STYLE_OUTLINE_WIDTH);

lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), NULL);

lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 0);

lv_obj_add_style(btn2, LV_BTN_PART_MAIN, &style_halo);

lv_obj_set_style_local_value_str(btn2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Halo");

/*Ripple on press*/

static lv_style_t style_ripple;

lv_style_init(&style_ripple);

lv_style_set_transition_time(&style_ripple, LV_STATE_PRESSED, 300);

lv_style_set_transition_time(&style_ripple, LV_STATE_DEFAULT, 0);

lv_style_set_transition_delay(&style_ripple, LV_STATE_DEFAULT, 300);

lv_style_set_bg_opa(&style_ripple, LV_STATE_DEFAULT, 0);

lv_style_set_bg_opa(&style_ripple, LV_STATE_PRESSED, LV_OPA_80);

lv_style_set_border_width(&style_ripple, LV_STATE_DEFAULT, 0);

lv_style_set_outline_width(&style_ripple, LV_STATE_DEFAULT, 0);

lv_style_set_transform_width(&style_ripple, LV_STATE_DEFAULT, -20);

lv_style_set_transform_height(&style_ripple, LV_STATE_DEFAULT, -20);

lv_style_set_transform_width(&style_ripple, LV_STATE_PRESSED, 0);

lv_style_set_transform_height(&style_ripple, LV_STATE_PRESSED, 0);

lv_style_set_transition_path(&style_ripple, LV_STATE_DEFAULT, &path_ease_out);

lv_style_set_transition_prop_1(&style_ripple, LV_STATE_DEFAULT, LV_STYLE_BG_OPA);

lv_style_set_transition_prop_2(&style_ripple, LV_STATE_DEFAULT, LV_STYLE_TRANSFORM_WIDTH);

lv_style_set_transition_prop_3(&style_ripple, LV_STATE_DEFAULT, LV_STYLE_TRANSFORM_HEIGHT);

lv_obj_t * btn3 = lv_btn_create(lv_scr_act(), NULL);

lv_obj_align(btn3, NULL, LV_ALIGN_CENTER, 0, 80);

lv_obj_add_style(btn3, LV_BTN_PART_MAIN, &style_ripple);

lv_obj_set_style_local_value_str(btn3, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Ripple");

}

LVGL按钮是简单的矩形对象。它们源自容器,因此也可以提供布局和配合。此外,可以启用它以在单击时自动进入检查状态。如您在使用中有遇到疑问,欢迎联系我们。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos 8.0 安装sysbench 1.0.17

序号步骤说明执行命令执行结果备注1 下载并解压sysbench-1.0.17.zip sysbench-1.0.17.zip2安装依赖文件 yum install automake libtool -y yum install /usr/include/libpq-fe.h 3安装sysbench cd sysbench-1.0.17 ./autogen.sh ./configure \ --prefix/sysbench \ --with-pgsq…

【骨灰级玩家】MySQL高手过招

MySQL自带数据库 自带数据库介绍 mysql 有四个自带的数据库:mysql、information_schema、performance_schema、sys mysql 创建数据库 要在MySQL中创建数据库,可以使用CREATE DATABASE语句。 示例查询如下所示: CREATE DATABASE database…

vue权限管理详解(如果控制到按钮级别的权限怎么做)

文章目录 一、是什么二、如何做接口权限路由权限控制方案一方案二 菜单权限方案一方案二 按钮权限方案一方案二 小结 一、是什么 权限是对特定资源的访问许可,所谓权限控制,也就是确保用户只能访问到被分配的资源 而前端权限归根结底是请求的发起权&am…

Flutter 监听前台和后台切换的状态

一 前后台的切换状态监听 混入 WidgetsBindingObserver 这个类,这里提供提供了程序状态的一些监听 二 添加监听和销毁监听 overridevoid initState() {super.initState();//2.页面初始化的时候,添加一个状态的监听者WidgetsBinding.instance.addObserver…

学生备考护眼灯哪个牌子好性价比高?2024最新台灯分享

现在越来越多90后家长有了孩子,而年轻家长也更加重视孩子们的成长健康,特别是小孩子的近视率越来越高,家长们就会选择护眼台灯来为孩子的视力保驾护航。但很多家长在选购时,面对各式各样的台灯却又陷入迷茫,究竟该怎么…

<软考高项备考>《论文专题 - 53 进度管理(4) 》

6 过程5-制定进度计划 6.1 问题 4W1H过程做什么分析活动顺序、持续时间、资源需求和进度制约因素,创建进度模型,从而落实项目执行和监控的过程作用:为完成项目活动而制定具有计划日期的进度模型为什么做为项目制定衡量项目的进度标尺谁来做…

加工制造EUV极紫外光刻机的钼/硅反射镜的方法与技术

EUV光刻机使用的反射镜材质是具有极高精度的钼/硅反射镜。这是因为几乎所有材料对13.5nm的EUV都强烈吸收,故EUV光刻机不能采用DUV那样的透镜,只能采用反射式光学系统。又因为EUV波长与晶格参数接近,很容易发生衍射,反射率也很低&a…

Qt优秀开源项目之二十:RedPanda-CPP(小熊猫C++)

小熊猫C是跨平台、轻量易用的开源C/C集成开发环境。 官网:http://royqh.net/redpandacpp github:https://github.com/royqh1979/RedPanda-CPP 小熊猫C(原名小熊猫Dev-C 7)是基于Qt开发的Dev-C替代版本。和经典的Dev-C 5.11、新的Embarcadero …

自定义监听,注册动态接口

1. 背景 前文( SpringBoot中动态注册接口-CSDN博客)已经示例说明了如何动态向springboot中注册接口,并将接口信息入库。但是,当服务重启后,这些接口便不存在了。此时我们需要在容器启动后重新注册。因而,我…

Windows下中文字符的UTF和GBK之间的转换,插入和读取MySQL

1、创建数据表 //测试UTF-8格式 指定字段name的字符集为utf8 COLLATE字符集的排序方式sql "CREATE TABLE IF NOT EXISTS t_utf8 \(id INT AUTO_INCREMENT , \name VARCHAR(1024) CHARACTER SET utf8 COLLATE utf8_bin,\PRIMARY KEY(id))"; 2、 指定与mysql处理的…

多级缓存、OpenResty缓存、Redis分布式缓存、进程缓存

目录标题 一、预期表现二、环境配置1、nginx环境2、OpenResty环境3、redis环境3.1 安装redis3.2 配置启动命令3.3 配置主从3.4 哨兵 4、进程缓存环境 三 、主要编码工作3.1、缓存主要问题解决3.1.1 缓存穿透3.1.2 缓存雪崩3.1.3 缓存击穿 3.2、OpenResty编码3.2.1 openresty/ng…

【算法Hot100系列】下一个排列

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Windows11下载安装nacos(2.3.0)详解

一、环境要求 windows7以上 jdk8及以上版本,并且配置了JAVA_HOME环境变量 二、nacos下载解压 release版本地址:Releases alibaba/nacos GitHub 下载后解压即可,上面的tar.gz是linux版本 解压后如下 nacos自己内置有数据库derby,我用的是…

[VisualStudioCode]_[VSCODE]_[C/C++开发环境配置-问题解决和补充]

场景 在使用VSCode配置C的开发环境时《VisualStudioCode_C/C开发环境配置[1]》,编译时会发现找不到标准库的std::mutex和std::thread的声明,而这两个的头文件已经引入,什么情况? 无论如何MinGW都是Windows上验证开发C特性比较新的…

005-Zynq基操之如何去玩EMIO接口(走过路过千万不要错过)

文章目录 前言一、EMIO是啥含义二、两种EMIO的使用1.PS端外设引出来的EMIO2.正常的EMIO口3.PS端驱动源码 总结 前言 今天分享这个主要原因是,把最基础的EMIO接口弄清楚咋操作的,咱们就可以做一些由PS端控制PL端的器件小功能,最常见的就是我们…

MySQL 5.7.35下载安装使用_忘记密码_远程授权

文章目录 MySQL 5.7.35下载安装使用_忘记密码_远程授权MySQL下载地址mysql安装点击安装,最好以管理员身份运行选择自定义安装选择64位勾选启动自定义产品执行点击同意点击下一步点击执行下一步配置数据库端口号设置登录密码,如果密码忘记,下面…

Java学习苦旅(二十三)——二叉搜索树

本篇博客将详细讲解二叉搜索树。 文章目录 二叉搜索树概念操作查找插入删除 性能分析 结尾 二叉搜索树 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根…

解决Docker报错问题:Docker Desktop – Unexpected WSL error

最近因为准备在NAS上通过Docker容器方式安装MYSQL,发现https://hub.docker.com网站被墙了,无法自动安装,同时又找不到靠谱的离线镜像,所以准备在Window上安装Docker,通过电脑的网络代理制作离线镜像再上传到NAS上。 在…

使用即时设计绘制原型设计方便吗?和Axure RP相比怎么样?

对于原型设计,APP 和 Web 都是一样的,因为产品原型是用来确定需求的工具。我们使用这种工具的目的是为了快速迭代,从而深入挖掘和筛选产品的需求。 绘制原型,最重要的原则是:快速、清晰! Axure 工具的优缺…

【搜索引擎】elastic search核心概念

前言 本文不涉及ES的具体安装下载、操作、集群的内容,这部分内容会放在后面一篇文章中。本文只包含ES的核心理论,看完本文再去学ES的细节会事半功倍。 目录 1.由日志存储引出的问题 2.什么是ES? 3.ES的数据结构 4.ES的核心原理 5.联系作…