合宙Air724UG LuatOS-Air LVGL API-概念
概念
在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。
属性
基本属性
所有对象类型都共享一些基本属性:
Position (位置)
Size (尺寸)
Parent (父母)
Click enable (单击启用)
我们可以使用 lvgl.obj_set_… 和 lvgl.obj_get_… 等前缀的函数设置或者获取这些属性。
例如:
– 设置基础对象的属性
lvgl.obj_set_size(btn, 100, 50) – 设置按键的大小
lvgl.obj_set_pos(btn, 20,30) – 设置按键的位置
特殊属性
有些对象类型也具有特殊的属性。例如,滑块具有
min、max、values (最小最大值)
current value (当前值)
custom styles (自定义样式)
对于这些属性,每种对象类型都有唯一的 API 函数。例如一个滑块的 API 调用过程:
– 设置滑块的特殊属性
lvgl.slider_set_range(slider, 0, 100) – 设置滑块的最小值和最大值
lvgl.slider_set_value(slider, 40, LV_ANIM_ON) – 设置当前值(屏幕坐标系位置)
lvgl.slider_set_action(slider, my_action) – 设置回调函数
工作机制
继承
父对象可以作为其子对象的容器。每个对象只能一个父对象(屏幕除外),但是一个父对象可以有无限多个子对象。父对象的类型没有限制,但是有特殊的父对象(例如,按钮)和特殊的子对象(例如,标签)。
追随
如果更改了父对象的位置,则子对象将与父对象一起移动,并且子对象的位置都保持相对于父对象位置不变。 例如,坐标 (0,0) 表示子对象将独立于父对象的位置保留在父对象的左上角,代码:
par = lvgl.obj_create(lvgl.scr_act(), nil) – 在当前屏幕中创建一个对象
lvgl.obj_set_size(par, 100, 80) – 设置对象的大小
obj1 = lvgl.obj_create(par, nil) – 基于前面创建的对象(par)创建一个子对象(obj1),之前的对像成为父对象
lvgl.obj_set_pos(obj1, 10, 10); – 设置子对象的位置
202104011247331.png
当我们修改父对象的位置,子对象也会一起移动,以保持和父对象的相对位置不变:
lvgl.obj_set_pos(par, 50, 50); – 移动父对象,子对象也会跟着移动,以保持相对位置不变
202104011247333.png
创建-删除
在LVGL中,可以在运行时动态地创建和删除对象。这意味着仅当前创建的对象需要消耗 RAM。例如,如果需要图表,我们可以在需要时创建它,并在不可见或不需要时将其删除。
每个对象类型都有各自的创建函数。它需要两个参数:
指向父对象的指针。创建屏幕时以 nil作为父级。
用于复制具有相同类型的对象的指针(可选)。如果不行进行复制操作为 nil。
创建函数如下所示:
lvgl._create(parent, copy)
lvgl.obj_del 将立即删除该对象。
我们可以使用 lv_obj_clean 删除对象的所有子对象(但不会删除对象本身):
lvgl.obj_clean(obj)
屏幕对象
创建屏幕对象
屏幕是没有父对象的特殊对象。应该像这样创建它们:
scr = lvgl.obj_create(nil, nil)
可以使用任何对象类型创建屏幕。例如:创建墙纸的基础对象或图像。
获取活动屏幕
这始终是每个显示屏上的活动屏幕。默认情况下,该库为每个显示创建并加载 “基础对象” 作为屏幕。
要获取当前活动的屏幕使用函数 lvgl.scr_act()
载入屏幕
调用函数 lvgl.scr_load(scr) 加载屏幕。
零件 (Parts)
控件可以包含多个 Parts。例如,按钮仅具有主要部分,而滑动条则由背景,指示器和旋钮组成。
控件名称的构造类似于 lvgl. + PART 。比如 lvgl.BTN_PART_MAIN 、 lvgl.SLIDER_PART_KNOB 。 通常在将样式添加到对象时使用 Parts。使用 Parts 可以将不同的样式分配给对象的不同 Parts。
状态
对象可以处于以下状态的组合:
lvgl.STATE_DEFAULT – 默认或正常状态
lvgl.STATE_CHECKED – 选中或点击
lvgl.STATE_FOCUSED – 通过键盘或编码器聚焦或通过触摸板/鼠标单击
lvgl.STATE_EDITED – 由编码器编辑
lvgl.STATE_HOVERED – 鼠标悬停(现在还不支持)
lvgl.STATE_PRESSED – 按下
lvgl.STATE_DISABLED – 禁用或无效
当用户按下,释放,聚焦等对象时,状态通常由库自动检测更改。 当然状态也可以手动检测更改。 要完全覆盖当前状态,调用 lvgl.obj_set_state(obj, part, lvgl.STATE…) 要设置或清除某个状态(但不更改其他状态),调用 lvgl.obj_add/clear_state(obj, part, lvgl.STATE_…) 可以组合使用状态值。例如: lvgl.obj_set_state(obj, part, lvgl.STATE_PRESSED)。
相关文章:
合宙Air724UG LuatOS-Air LVGL API-概念
概念 在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性: Position (位置) Size (尺寸) Parent (父母) Cli…...
【C语言】位段,枚举和联合体详解
目录 1.位段 1.1 什么是位段 1.2 位段的内存分配 1.3 位段的跨平台问题 2.枚举 2.1 枚举类型的定义 2.2 枚举的优点 3. 联合(共用体) 3.1 联合类型的定义 3.2 联合的特点 3.3 联合大小的计算 1.位段 1.1 什么是位段 位段的声明和结构体是类…...
python学习-文件管理
文件管理 shutil 文件拷贝 shutil.copy(src,dst) 注:srcrE:\python\.vscode\文件操作 windows上运行时候,如果不加r,上述文件路径在代码运行时会报错,因为其会先将双引号”“去掉,然后系统看到了文件路径中有\nc&…...
【LeetCode 算法】Number of Ways of Cutting a Pizza 切披萨的方案数-记忆化
文章目录 Number of Ways of Cutting a Pizza 切披萨的方案数问题描述:分析代码递归 Tag Number of Ways of Cutting a Pizza 切披萨的方案数 问题描述: 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: A…...
机器视觉之光流
光流(Optical Flow)是计算机视觉领域的一个重要概念,用于描述图像中物体的运动模式。光流可以用来跟踪图像中物体的运动,检测运动中的物体,或者在机器视觉任务中估计物体的速度和位移。 光流的基本思想是根据图像像素…...
C++:list使用以及模拟实现
list使用以及模拟实现 list介绍list常用接口1.构造2.迭代器3.容量4.访问数据5.增删查改6.迭代器失效 list模拟实现1.迭代器的实现2.完整代码 list介绍 list是一个类模板,加<类型>实例化才是具体的类。list是可以在任意位置进行插入和删除的序列式容器。list的…...
深度学习基础知识-pytorch数据基本操作
1.深度学习基础知识 1.1 数据操作 1.1.1 数据结构 机器学习和神经网络的主要数据结构,例如 0维:叫标量,代表一个类别,如1.0 1维:代表一个特征向量。如 [1.0,2,7,3.4] 2维:就是矩…...
Springboot使用QueryDsl实现融合数据查询
SpringbootQueryDsl技术 1、添加依赖 <!--基于JPA--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--QueryDSL支持--> <dependenc…...
解决方案 | 电子签打通消费电子行业数智化经营通路
技术迭代不断驱动产业快速增长,从PC电脑到手机平板、再到可穿戴设备的兴起,每一次设备的迭代都代表着技术为产品注入了新的发展动能。与此同时,消费电子设备迭代更新周期的不断缩短,市场增长疲缓等因素,也对行业的流转…...
JVM理论知识
一、JVM内存结构 java的内存模型主要分为5个部分,分别是:JVM堆、JVM栈、本地栈、方法区还有程序计数器,他们的用途分别是: JVM堆:新建的对象都会放在这里,他是JVM中所占内存最大的区域。他又分为新生区还…...
idea - 报错 Mybatis提示Tag name expected的问题< 小于号 无法识别
问题:Mybatis提示Tag name expected 原因: 当我们在mapper中编写sql语句的时候会发现使用"<“符号会提示一个Tag name expected。这是因为xml文件中不识别”<"符号和“&”符号。防止与xml本身的元素命名混淆,导致无法解…...
合宙Air724UG LuatOS-Air LVGL API--对象
对象 概念 在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性: Position (位置) Size (尺寸) Parent (父母…...
Java将PDF文件转为Word文档
Java将PDF文件转为Word文档 一、创建Springboot Maven项目 二、导入依赖信息 <repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories&g…...
vite创建项目命令
1.第一步运行创建命令(npm) npm create vitelatest也可以使用yarn yarn create vite还可以 pnpm create vite注意的地方:首次创建的时候会出现这个 Need to install the following packages:create-vitelatest Ok to proceed? (y) 直接y就…...
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
前端加springboot实现Web Socket连接通讯以及测试流程(包括后端实现心跳检测)
【2023】前端加springboot实现Web Socket连接通讯(包括后端实现心跳检测) 一级目录二级目录三级目录 前言一、Web Socket 简绍1 为什么用 websocket? 二、代码实现1、前端(html)1.1、无前端向后端发送消息1.2、有前端向…...
node使用高版本的oracledb导致连接oracle的Error: NJS-138异常
异常信息如下 Error: NJS-138: connections to this database server version are not supported by node-oracledb in Thin mode 我的oracle版本是11g,之前的使用正常,今天却报错了,显示不支持thin模式,后面回退版本就可以了。...
RabbitMQ手动签收消息
RabbitMQ手动签收消息 这里讲解SpringBoot使用RabbitMQ进行有回调的用法和消费者端手动签收消息的用法。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"h…...
Unity 3d角色展示脚本(旋转 平移 缩放)展示界面
不考虑性能 很简陋的一个功能,主要是用于角色渲染的观察用,比simplecontroller要好用一点 using System; using UnityEngine;public class CharacterViewer : MonoBehaviour {public Transform target; // 人物模型的Transformpublic float rotationSpee…...
Spring Boot 将 Word 转换为 PDF
首先,确保项目中添加了对Apache POI和Apache PDFBox的依赖。可以在你的 pom.xml 文件中添加以下依赖: <dependencies><!-- Apache POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</arti…...
告别答辩PPT噩梦:百考通AI如何帮你高效搞定毕业答辩
写了大半年的论文,却在最后一步的答辩PPT上栽了跟头?这可能是许多毕业生的真实写照。 01 毕业季的隐形杀手:PPT焦虑症 五月,校园里的玉兰花开得正盛,图书馆的灯光却依然亮到深夜。论文查重通过了,导师点头…...
基于ESP8266与ADC同步解调实现远距离反射式光电检测:ITR8307实战
1. 反射式光电检测的必要性 在智能车竞赛中,节能信标组的设计一直面临一个棘手问题:传统磁铁触发方式容易导致对抗比赛中车模相互吸附。我亲眼见过两辆精心调校的车模因为磁铁吸引力"难舍难分"的尴尬场景,这直接影响了比赛公平性和…...
Flexpilot AI:开源可定制的VS Code AI编程助手配置与实战指南
1. 项目概述与核心价值作为一名在开发工具领域摸爬滚打了十多年的老码农,我见证过无数个“下一代编辑器”和“智能助手”的兴衰。当GitHub Copilot横空出世,确实改变了游戏规则,但随之而来的,是开发者们被锁定在单一服务商、高昂的…...
ARM调试状态与Halting Step机制详解
1. ARM调试状态机制深度解析在嵌入式系统开发中,调试功能的重要性不言而喻。ARM架构提供了一套完整的调试机制,其中调试状态(Debug State)是核心组成部分。当处理器进入调试状态时,会暂停正常程序执行,将控…...
用STM32CubeMX和HAL库驱动MG90S舵机:从PWM原理到代码实现的保姆级教程
用STM32CubeMX和HAL库驱动MG90S舵机:从PWM原理到代码实现的保姆级教程 第一次接触舵机控制时,我被那个小小的MG90S迷住了——它居然能精确地转动到指定角度!但当我真正开始用STM32控制它时,才发现PWM参数配置的坑比想象中多得多。…...
基于T4技术栈的现代全栈应用开发实践与最佳实践解析
1. 项目概述:一个现代全栈应用的原型与起点最近在GitHub上看到一个挺有意思的项目,叫timothymiller/t4-app。乍一看这个名字,可能有点摸不着头脑,但点进去你会发现,这其实是一个精心设计的全栈Web应用模板。它不是某个…...
MTKClient实战指南:联发科设备刷机与逆向工程全面解决方案
MTKClient实战指南:联发科设备刷机与逆向工程全面解决方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款专为联发科芯片设备设计的开源逆向工程与刷机工具&am…...
量子信号处理技术及其在离子阱系统中的应用
1. 量子信号处理技术概述量子信号处理(Quantum Signal Processing, QSP)是近年来量子计算领域涌现的一项基础性技术,它通过精心设计的量子比特旋转序列,实现对量子数据的系统性多项式变换。这项技术的核心价值在于,它为…...
网盘直链解析工具完整指南:技术实现与高效下载策略
网盘直链解析工具完整指南:技术实现与高效下载策略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...
C语言指针:从零掌握指针(5) 完结篇
文章目录C语言指针:从零掌握指针(5) 完结前言一、回调函数1.1 什么是回调函数?1.2 使用回调函数二、qsort函数2.1 qsort基础2.2 排序整形数据2.3 排序浮点型数据2.4 排序结构数据三,qsort函数模拟实现C语言指针&#x…...
