LVGL9 开关控件 (lv_switch) 使用指南
文章目录
- 前言
- 主体
- 1. **控件概述**
- 2. **控件的样式和组成部分**
- 3. **使用控件**
- 改变开关状态
- 4. **事件处理**
- 5. **按键支持**
- 6. **示例代码**
- 总结
前言
lv_switch 是 LittlevGL 提供的一个开关控件,外观类似一个小型滑块,常用于实现开关功能,用来开启或关闭某项功能。通过其灵活的样式和交互特性,lv_switch 在 UI 开发中非常实用。
主体
1. 控件概述
lv_switch 是一种交互控件,通常表示一个二元状态:开启或关闭。它的外观基于滑块设计,用户可以通过拖动或点击控件来改变其状态。
2. 控件的样式和组成部分
lv_switch 的样式分为以下部分:
-
LV_PART_MAIN:控件的背景区域。支持所有典型的背景样式属性,如颜色、圆角和边框。
padding属性可以调整背景区域的大小。 -
LV_PART_INDICATOR:指示当前状态的滑块条。支持背景样式属性,例如改变颜色以表示“开启”或“关闭”状态。
-
LV_PART_KNOB:滑块的圆形或矩形按钮,位于滑块条的左侧或右侧。支持背景样式属性,包括大小、形状和边距。默认情况下,旋钮的尺寸与滑块的较小一侧相等,可以通过
padding调整其大小和位置。
开发者可以通过这些样式自定义控件的外观,例如改变滑块的颜色或按钮的形状。
3. 使用控件
改变开关状态
lv_switch 使用标准的 LV_STATE_CHECKED 状态来表示开关的开启状态。以下是状态的相关操作:
-
获取当前状态:
使用以下函数检查开关是否开启(true表示开启):bool is_checked = lv_obj_has_state(switch_obj, LV_STATE_CHECKED); -
开启开关:
使用以下函数手动开启开关:lv_obj_add_state(switch_obj, LV_STATE_CHECKED); -
关闭开关:
使用以下函数手动关闭开关:lv_obj_remove_state(switch_obj, LV_STATE_CHECKED);
4. 事件处理
lv_switch 提供了一个事件来响应状态变化:
- LV_EVENT_VALUE_CHANGED:当开关的状态改变时触发该事件。可以通过事件回调函数获取状态变化信息。
示例代码:
void switch_event_cb(lv_event_t * e) {lv_obj_t * obj = lv_event_get_target(e);bool is_on = lv_obj_has_state(obj, LV_STATE_CHECKED);if (is_on) {printf("Switch is ON\n");} else {printf("Switch is OFF\n");}
}// 注册事件
lv_obj_add_event_cb(switch_obj, switch_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
5. 按键支持
lv_switch 提供以下按键操作:
- LV_KEY_UP/RIGHT:开启开关。
- LV_KEY_DOWN/LEFT:关闭开关。
- LV_KEY_ENTER:切换开关状态(开启或关闭)。
6. 示例代码
以下示例展示了如何创建一个开关控件并监听其状态变化:
void create_switch_example() {// 创建一个开关控件lv_obj_t * switch_obj = lv_switch_create(lv_scr_act());// 设置开关的位置lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0);// 添加状态改变事件回调lv_obj_add_event_cb(switch_obj, switch_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
}void switch_event_cb(lv_event_t * e) {lv_obj_t * obj = lv_event_get_target(e);if (lv_obj_has_state(obj, LV_STATE_CHECKED)) {printf("Switch is ON\n");} else {printf("Switch is OFF\n");}
}
总结
lv_switch 是一个直观且功能强大的开关控件,适用于需要二元状态切换的场景。通过灵活的样式和简单的事件处理,开发者可以轻松地将其集成到 UI 中,为用户提供友好的交互体验。
相关文章:
LVGL9 开关控件 (lv_switch) 使用指南
文章目录 前言主体1. **控件概述**2. **控件的样式和组成部分**3. **使用控件**改变开关状态 4. **事件处理**5. **按键支持**6. **示例代码** 总结 前言 lv_switch 是 LittlevGL 提供的一个开关控件,外观类似一个小型滑块,常用于实现开关功能ÿ…...
fastadmin 登录退出忽略中间提示页面
背景 研究了一圈CMS,从fastadmin、easyadmin、buildadmin、onethink等等几乎所有的框架CMS,当然也包括若依。 最后,根据当前项目综合考虑,还是选择的fastadmin: 预算经济实惠、维护成本低;工期端&#x…...
游戏引擎学习第36天
仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中,目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎,这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中࿰…...
准确率99.9%的离线IP地址定位库 ip2region - python 示例
简介:ip2region是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。号称准确率99.9%的开源离线IP地址定位库。 历史攻略: Python:暴力破解密…...
wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库
wordpress网站使用Linux宝塔面板添加mysql数据库,使用phpMyAdmin工具导入sql数据库文件,会有最大限制50M。即使把sql数据库文件压缩为gzip或zip压缩包,压缩包也超过50M,该怎么办?怎样导入超过50M数据库呢? …...
开发基础(3):开发应用沉浸式效果 组件安全区方案
什么是沉浸式效果 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条,其中状态栏和导航条,通常在沉浸式布局下称为避让区;避让区之外的区域称为安全区。 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感…...
Python中的数据可视化实战
一、前言 数据可视化是数据分析和报告中不可或缺的环节,它能够帮助我们直观地理解数据规律。Python提供了多个强大的可视化库,如Matplotlib、Seaborn、Plotly等。本文将通过实例演示这些工具的基本用法和高级技巧。 二、Matplotlib基础 1. Matplotlib的基本用法 import ma…...
计算机毕设-基于springboot的甜品店管理系统的设计与实现(附源码+lw+ppt+开题报告)
博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...
SpringMVC纯注解快速开发
此文章适合具有一定的java基础的同学看哦,如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发,易懂、快捷、迅速,从0开始搭建,很快就能构建起一个SpringMVC项目,能学到两种使用tom…...
【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
一个电商平台可能需要一个数据库来存储用户信息,另一个数据库来存储订单信息,甚至可能还有一个数据库用于数据分析。这种情况下,如何在Spring Boot应用中实现多数据源的管理就显得尤为重要。 1. 多数据源管理的重要性 在实际应用中…...
汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全
目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…...
黑马点评项目测试总结
黑马点评项目测试面经总结: 一,怎么使用使用Postman进行接口测试? 1,安装Postman 2. 创建请求: 打开Postman,点击"New"按钮创建一个新的请求。在弹出的窗口中,选择请求的类型&#x…...
【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面
0x00 前言 朋友做标书,需要用到每日温度,他的老板让在这个网页手动复制做一个长期表出来:http://www.tianqihoubao.com/lishi/nanjing/month/202412.html 想着帮个忙,做个爬虫脚本吧,忽然发现这个页面很有意思…...
【docker】docker compose 和 docker swarm
Docker Compose 和 Docker Swarm 都是 Docker 生态中的工具,但它们有不同的用途和目标。 下面是这两者的主要区别,帮助你理解它们在不同场景中的使用。 1. 用途和目标 Docker Compose: 目标:主要用于在单个机器上定义和运行多个容器应用&a…...
Javaweb 前端 ajax
作用:和后端交互 script 是 js axios(这里是函数的调用方式){封装的是对象} {}是对象 案例 。then的含义,请求后端之后,后端把数据放在回调 点了清空之后,还要查询全部 await等待请求执行完之后,接收这个结果 代码…...
【蓝桥杯每日一题】重新排序
重新排序 2024-12-8 蓝桥杯每日一题 重新排序 前缀和 差分 题目大意 给定一个数组 A 和一些查询 L i , R i Li_,R_i Li,Ri, 求数组中第 L i L_i Li至第 R i R_i Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能…...
《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
MAC算法有两种形式,分别是CBC-MAC算法和HMAC算法。 CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值。 HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元&am…...
如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求
Apache HttpClient 是一个功能强大且灵活的库,用于在Java中处理HTTP请求。 它支持多种HTTP方法,包括GET、POST、PUT和DELETE等。 本教程将演示如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求。 Maven依赖 要使用Apache HttpClient&…...
数据结构-希尔排序
每次对5个间隔的元素进行插入排序,然后间隔依次递减,直到间隔为1 互质:相邻的两个元素没有公因子 这个例子只有间隔1起来作用 #include<iostream> using namespace std; typedef int ElmentType; void shell_Sort(ElmentType A[], int…...
Spire.doc 合并word,复制word
之前使用的poi来实现这个功能,然后发现在复制chart时,边框样式无法修改,于是就使用了spire.doc 1. 引入依赖 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https…...
从零开始玩转Arduino:手把手教你用MOS管和继电器控制大电流设备(附电路图)
从零开始玩转Arduino:手把手教你用MOS管和继电器控制大电流设备(附电路图) 当你第一次尝试用Arduino控制大功率设备时,可能会遇到一个常见问题:小小的开发板输出引脚根本无法直接驱动电机、灯带或加热管。这时候&#…...
低代码AI开发:这些工具让AI原生应用开发效率提升10倍
低代码AI开发:这些工具让AI原生应用开发效率提升10倍 关键词:低代码开发、AI原生应用、开发效率、AutoML、拖拽式建模、企业级AI落地、工具链整合 摘要:传统AI开发需要精通算法、数据处理和工程实现,门槛高且周期长。本文将揭秘“…...
TresJS实战指南:Vue 3D场景开发从入门到精通
1. TresJS基础入门:从零搭建3D场景 第一次接触TresJS时,我完全被它的简洁性震惊了。作为一个基于Three.js的Vue组件库,它让3D开发变得像写普通Vue组件一样自然。先来看个最简单的例子: <template><TresCanvas><Tre…...
Fastfetch:超越 Neofetch 的系统信息获取新利器
【导语:Fastfetch 作为一款类似 neofetch 的工具,以 C 语言编写,注重性能与可定制性,支持多平台。它在速度、功能、准确性等方面超越竞品,为用户带来全新系统信息获取体验。】多平台适配的系统信息工具Fastfetch 是一款…...
如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发
如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下,你心爱的Unity游戏缺少某个功能ÿ…...
3步解锁Umi-OCR服务化潜能:让自动化文字识别融入工作流
3步解锁Umi-OCR服务化潜能:让自动化文字识别融入工作流 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/Git…...
Flux Sea Studio 与Node.js全栈项目集成:打造在线海景艺术画廊
Flux Sea Studio 与Node.js全栈项目集成:打造在线海景艺术画廊 最近在做一个挺有意思的业余项目,想给喜欢海洋艺术的朋友们弄个在线画廊。这个画廊的特别之处在于,它不只是展示静态图片,而是能让用户自己动手,用文字描…...
Reset Windows Update Tool终极指南:3步快速修复Windows更新所有问题
Reset Windows Update Tool终极指南:3步快速修复Windows更新所有问题 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
红日靶场(二)phpstudy服务异常排查与修复指南
1. phpstudy服务异常排查思路 遇到phpstudy服务启动失败时,很多新手会直接重装软件,其实80%的问题通过系统化排查都能解决。我处理过上百个红日靶场环境,总结出这套黄金排查法则: 首先确认报错类型,常见的三种情况&…...
低成本搭建DNF外网服务器:腾讯云轻量应用服务器实战教程
腾讯云轻量应用服务器搭建DNF外网版全攻略 最近几年,怀旧游戏私服搭建在技术爱好者圈子里越来越流行。作为一款经典的横版格斗网游,DNF(地下城与勇士)的私服搭建需求尤其旺盛。本文将详细介绍如何利用腾讯云轻量应用服务器&#x…...
