lvgl 笔记 基础对象与组件

news/2024/4/27 21:02:01/文章来源:https://blog.csdn.net/nullccc/article/details/128752336

一、基础对象

1.1基础对象简介

 lvgl 库是纯 c 语言编写的,使用结构体实现类的操作。其所有组件都继承字lv_obj_t,可以使用他的属性和方法。

创建一个基本对象非常简单:

lv_obj_t* obj1 = lv_obj_create(lv_scr_act());

其中填入的 lv_scr_act() 是他的父对象,这个值可以是其他的实例化的基础对象,在这里 lv_scr_act() 是值屏幕窗口,告知 lvgl 直接在窗口创建一个对象,不继承自其他对象。

1.2 基本对象大小与位置 (size&position)

    lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建对象lv_obj_set_height(obj1, 200); //只设置高度lv_obj_set_width(obj1, 300); //只设置宽度lv_obj_set_size(obj1, 300,200); //设置宽高lv_obj_set_x(obj1, 10);//设置xlv_obj_set_y(obj1, 20);//设置ylv_obj_set_pos(obj1, 10,20);//设置xy

在 lvgl 中,左上角坐标为 (0,0),上侧代码效果如下: 

1.3 基本对象 继承关系

基本对象之间可以互相继承,其坐标对其也会根据父坐标偏移。

lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建对象
lv_obj_t* obj2 = lv_obj_create(obj1); //继承obj1
lv_obj_set_size(obj2, 50, 50); //设置宽高
lv_obj_set_pos(obj2, 20, 20);//设置xy

继承后则会叠在被继承的对象之上: 

 

1.4 基本对象对齐

1.4.1 参考父对象对齐

lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建对象
lv_obj_set_align(obj1, LV_ALIGN_CENTER); //剧中对齐
lv_obj_align(obj1, LV_ALIGN_CENTER, 200, 0); //剧中对齐后再偏移200,0

 效果如下:

其中,对齐的参数都是以 LV_ALIGN_XXXX来 表示的,共有这些参数,子对象对齐只能选择中间的深色区域内的九种:

  

1.4.1 参考其他对象对齐(无父子关系)

    lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建对象lv_obj_t* obj2 = lv_obj_create(lv_scr_act()); //创建对象lv_obj_align_to(obj2, obj1, LV_ALIGN_CENTER, 10,10); //obj1为基准对象,obj2为需要对齐的对象

效果如下:因为 obj1 先被创建,obj2 后被创建,所以会叠在他之上。

 

 我们可以使用之前这张图中浅色区域的值,这样就不会发生重叠

lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建对象
lv_obj_t* obj2 = lv_obj_create(lv_scr_act()); //创建对象
lv_obj_align_to(obj2, obj1, LV_ALIGN_OUT_RIGHT_MID, 10,10); //obj1为基准对象,obj2为需要对齐的对象

 

1.4 基本对象样式 (styles)

1.4.1 普通样式配置

void test(void) {static lv_style_t style; //创建样式lv_style_init(&style); //初始化 lv_style_set_bg_color(&style, lv_color_hex(0xfb3d3d)); //配置颜色lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建部件lv_obj_add_style(obj1, &style, LV_STATE_DEFAULT); //配置部件颜色
}

 

1.4.2 添加本地样式

    lv_obj_t* obj1 = lv_obj_create(lv_scr_act()); //创建部件lv_obj_set_style_bg_color(obj1, lv_color_hex(0xfb3d3d), LV_STATE_DEFAULT); //配置部件颜色

 效果与上图相同,当我们右键查看这个函数声明时,lvgl 已经给出很多单独配置的函数:

 

 具体可以函数根据提示参数和官方文档进行配置。

1.4.4 什么时候会生效? 

 其中 lv_obj_add_style() 函数可以配置触发场景,我们之前一直写的是 LV_STATE_DEFAULT,如果我们把它换成按下触发:

    static lv_style_t style;lv_style_init(&style);lv_style_set_bg_color(&style, lv_color_hex(0xfb3d3d));lv_obj_t* obj1 = lv_obj_create(lv_scr_act());lv_obj_add_style(obj1, &style, LV_STATE_PRESSED);  //按下触发

 

1.4.5 配置对象的部分样式

对于一个 slider 拖拽条来说,可以单独配置背景色,选中色,和滑块色。 

 

比如要实现以上效果,只需要在 lv_obj_set_style_bg_color() 之后与上需要设置的配置即可。

    lv_obj_t* slider = lv_slider_create(lv_scr_act());lv_obj_set_align(slider,LV_ALIGN_CENTER);lv_obj_t* slider1 = lv_slider_create(lv_scr_act());lv_obj_set_align(slider1, LV_ALIGN_CENTER);lv_obj_set_pos(slider1, 0, 50);lv_obj_set_style_bg_color(slider1, lv_color_hex(0xf4b183), LV_STATE_DEFAULT);lv_obj_t* slider2 = lv_slider_create(lv_scr_act());lv_obj_set_align(slider2, LV_ALIGN_CENTER);lv_obj_set_pos(slider2, 0, 100);lv_obj_set_style_bg_color(slider2, lv_color_hex(0xf4b183), LV_STATE_DEFAULT | LV_PART_INDICATOR);lv_obj_t* slider3 = lv_slider_create(lv_scr_act());lv_obj_set_align(slider3, LV_ALIGN_CENTER);lv_obj_set_pos(slider3, 0, 150);lv_obj_set_style_bg_color(slider3, lv_color_hex(0xf4b183), LV_STATE_DEFAULT | LV_PART_KNOB);

1.5 基本对象事件(events)

以下是两个关于事件的函数: 

lv_obj_t* obj1; //创建两个基本对象
lv_obj_t* obj2;static void my_event_cb(lv_event_t* e) {lv_event_code_t code = lv_event_get_code(e); //获得触发事件if (code == LV_EVENT_CLICKED) {printf("LV_EVENT_CLICKED \n");}else if (code == LV_EVENT_LONG_PRESSED) {printf("LV_EVENT_LONG_PRESSED \n");}lv_obj_t* target = lv_event_get_target(e); //获得触发的基本对象if (target == obj1) {printf("obj1 \n");}else if(target == obj2){printf("obj2 \n");}
}void test(void) {obj1 = lv_obj_create(lv_scr_act()); //创建基本对象lv_obj_add_event_cb(obj1, my_event_cb, LV_EVENT_CLICKED,NULL); //绑定单击事件lv_obj_add_event_cb(obj1, my_event_cb, LV_EVENT_LONG_PRESSED, NULL); //绑定长摁事件obj2 = lv_obj_create(lv_scr_act()); //创建基本对象lv_obj_set_pos(obj2,300,0);lv_obj_add_event_cb(obj2, my_event_cb, LV_EVENT_CLICKED, NULL); //绑定单击事件lv_obj_add_event_cb(obj2, my_event_cb, LV_EVENT_LONG_PRESSED, NULL); //绑定长摁事件
}

 其中:这两个函数可以获得触发的事件和对象

lv_event_code_t code = lv_event_get_code(e); //获得触发事件
lv_obj_t* target = lv_event_get_target(e); //获得触发的基本对象

 效果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python面向对象的三大特征 - - 封装、继承、多态

目录 一、三大特征介绍 1、封装(隐藏) 2、继承 3、多态 二、继承 1、子类扩展父类 1.语法格式 2.构造函数 2、类成员的继承和重写 1. 成员继承 2. 方法重写 3、查看类的继承层次结构 4、object根类 1.描述 2. dir() 查看对象属性&#xff…

洗地机哪个牌子比较好?家用洗地机推荐

洗地机是可以做到扫地的同时把地也拖了,可以做到高效清洁,减轻家务负担。还具有杀菌功能,不用担心拖完地之后地面还有细菌滋生啦,洗地机可以做到即洗即干,无需等待拖完地之后还潮湿不能走路,尤其对于木地板…

2024秋招BAT核心算法 | 详解图论

图论入门与最短路径算法 图的基本概念 由节点和边组成的集合 图的一些概念: ①有向边(有向图),无向边(无向图),权值 ②节点(度),对应无向图,…

统计学 一元线性回归

统计学 一元线性回归 回归(Regression):假定因变量与自变量之间有某种关系,并把这种关系用适当的数学模型表达出来,利用该模型根据给定的自变量来预测因变量 线性回归:因变量和自变量之间是线性关系 非线…

CF756div3 vp

又被薄纱了,rk就不放了,好丢人QwQDashboard - Codeforces Round 756 (Div. 3) - CodeforcesA. Make Even小分类讨论题意:给定一个数,每次操作可以选取其前缀然后翻转其前缀,问你最少操作几次可以把该数变为偶数思路&am…

HCIP---回顾HCIA

HCIA回顾: 抽象语言---编码 编码---二进制 二进制---电信号 处理电信号 OSI参考模型----OSI/RM (Open System Interconnect-----开放式系统互连) 应用层:为终端用户提供网络服务接口 表示层:提供数据格式转换服务 会话层&#xff1a…

可视化项目管理,控制项目进度,项目经理需要做好以下工作

对于项目的管理者来说,项目信息透明,能够更容易让管理者发现项目中的问题,及时找到问题的原因和相关任务的责任人。 当项目信息能相对精准地呈现给管理者时,也能促进项目成员也能更加认真负责的完成任务,不会找借口推…

Verilog 学习第八节(数码管段码显示)

共阴极数码管:低电平端接的都是0,高电平端哪里设置为1 ,哪里就亮~ 共阳极数码管与之相反~ 视觉暂留: 对于三位的共阴极数码管 第0.01s:让数码管0的a段亮,其他数码管全灭 Sel0为高电平,sel1和sel…

开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)

开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一) 前言——系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些嵌入式等其他领域知识&…

Telink之标准SDK的介绍_1

前提:常见的项目架构:应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个): algorithm,application,boot,common,drivers,proj_lib,stack,v…

HBase常用Shell命令

HBase提供了一个非常方便的命令行交互工具HBase Shell。通过HBase Shell,HBase可以与MySQL命令行一样创建表、索引,也可以增加、删除和修改数据,同时集群的管理、状态查看等也可以通过HBase Shell实现。 一、数据定义语言 数据定义语言&…

LeetCode 1599. Maximum Profit of Operating a Centennial Wheel【数组,模拟】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

[ 攻防演练演示篇 ] 利用 shiro 反序列化漏洞获取主机权限

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

ATool软件使用实验(22)

实验目的 1、学习ATool软件监控主机行为的原理; 2、学习利用ATool软件监控可疑进程的行为; 3、学习利用ATool软件实现对本机进行文件、注册表管理; 4、学习利用ATool软件实现对本机进行内核模块信息和HOOK信息查看。 预备知识 ATool是针…

测试按方向的分类

按方向分(都是在系统测试阶段测试的) 功能测试:举例说明什么是功能 性能测试 ①压力测试:不断地增加压力,从而找到系统的极限 ②负载测试:系统在极限工作条件下,最多能持续多久——可能发生内存泄漏/溢出,导…

Appium+Python连接真机、跳过登录页、Unexpected error while obtaining UI hierarchy问题

Appium连接真机 使用数据线连接电脑,然后选择文件传输方式 打开手机设置拉至底部,点击关于手机,连续点击7次版本号打开开发者模式 点击设置中的系统与更新,找到开发者选项----> 打开USB调试即可 在终端中输入adb devices确定…

案例解读| 从集中告警平台发展趋势看城商行如何落地数字化转型(二)

上期我们以具体案例入手,分享了集中告警平台到底应该与集中监控平台解耦还是紧绑定等问题。这一期依旧从具体案例切入,跟大家一起探索下告警与服务台的对接过程,以及这个过程中可能产生的问题。上期内容,一键回顾不迷路→案例解读…

angular技术(持续更新)

css类绑定[class.color-blue]"isBlue()" 如果isBlue()返回为true 这里使用color-blue的class样式style样式绑定[style.background-color]"canclick ? blue: red" 组件与模块模块的元数据*declarations: 用于指定属于这个模块的视图类(View Cla…

YOLOV5中添加CBAM模块详解——原理+代码

目录一、前言二、CAM1. CAM计算过程2. 代码实现3. 流程图三、SAM1. SAM计算过程2. 代码实现3. 流程图四、YOLOv5中添加CBAM模块参考文章一、前言 由于卷积操作通过融合通道和空间信息来提取特征(通过NNNNNN的卷积核与原特征图相乘,融合空间信息&#xff…

代码随想录-51-110.平衡二叉树

目录前言题目1.求高度和深度的区别节点的高度节点的深度2. 本题思路分析:3. 算法实现4. pop函数的算法复杂度5. 算法坑点前言 在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专…