闭门造轮(LVGL_1)

news2024/11/23 23:30:43

参考的课程:

全志韦东山的课程:https://www.100ask.net/p/t_pc/course_pc_detail/column/p_61c5a317e4b0cca4a4e8b6f1?product_id=p_61c5a317e4b0cca4a4e8b6f1

例程1_// 基础对象(lv_obj),"Hello, LVGL!"

void lvgl_demo(void)
{
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj, LV_PCT(20), LV_PCT(10));
    lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0);

    lv_obj_t * label = lv_label_create(obj);
    lv_label_set_text(label, "Hello, LVGL!");
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
}

 LVGL_API解析:

lv_obj_t * obj = lv_obj_create(lv_scr_act());

//创建一个基础对象,基础对象样式默认为矩形,这里的lv_scr_act()是LVGL提供的API,表示获取当前屏幕对象

lv_obj_set_size(obj, LV_PCT(20), LV_PCT(10));

//lv_obj_set_size函数设置对象的大小,使用LV_PCT宏指定百分比大小,这里设置为20% x 10%

lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0);

//lv_obj_align函数将对象置于屏幕中心,使用LV_ALIGN_CENTER宏指定对齐方式,其中第三个和第四个参数分别表示在水平和垂直方向上的偏移量。

//有宏定义如下:

  • LV_ALIGN_DEFAULT: 默认对齐方式,由具体对象确定。
  • LV_ALIGN_TOP_LEFT: 左上角对齐。
  • LV_ALIGN_TOP_MID: 上中对齐。
  • LV_ALIGN_TOP_RIGHT: 右上角对齐。
  • LV_ALIGN_BOTTOM_LEFT: 左下角对齐。
  • LV_ALIGN_BOTTOM_MID: 下中对齐。
  • LV_ALIGN_BOTTOM_RIGHT: 右下角对齐。
  • LV_ALIGN_LEFT_MID: 左中对齐。
  • LV_ALIGN_RIGHT_MID: 右中对齐。
  • LV_ALIGN_CENTER: 中心对齐。

lv_obj_t * label = lv_label_create(obj);
lv_label_set_text(label, "Hello, LVGL!");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);

//lv_label_create函数在上一步创建的对象上创建一个标签对象,然后使用lv_label_set_text函数设置标签文本为“Hello, LVGL!”。最后,再次使用lv_obj_align函数将标签对象置于上一步创建的对象中心。

自己造个轮_1:

额?...这几个API还能玩出花来不成?...

例程2_// 基础对象的大小(size)

void lvgl_demo(void)
{
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_set_width(obj, 300);
    lv_obj_set_height(obj, 500);
    //lv_obj_set_size(obj,300, 300);

    printf("w:%d\n", lv_obj_get_width(obj));
    printf("h:%d\n", lv_obj_get_height(obj));
}

这段代码创建了一个基本对象,并且将这个对象的长和宽设定为300和500,通过lv_obj_get_width(obj)和lv_obj_get_width(obj)获取到对象的长宽

 但是奇怪的来了,打印的值是0

 可以看到,返回值类型是一个16位整型,用%d没有问题?但为什么呢?

GPT是这样说的:

但是不行,在添加了lv_obj_invalidate(obj)后仍没有能够显示对象的长和宽,问了另一个模型:

 更改代码后,结果确实是打印出来了:

自己造个轮_2

题目:建立一个长500宽300的基本对象,并通过lv_obj_get_width(obj)等方式获取到相关数据,在第一个创建的对象的右边紧贴着建立一个长300宽500的基本对象

void lvgl_demo(void)
{
    lv_obj_t * obj_1 = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj_1,500, 300);
    lv_obj_align(obj_1, LV_ALIGN_TOP_LEFT, 0, 0);

    lv_task_handler(); // 处理LVGL任务循环

    lv_obj_t * obj_2 = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj_2,lv_obj_get_height(obj_1), lv_obj_get_width(obj_1));
    lv_obj_align(obj_1, LV_ALIGN_TOP_LEFT, 300, 0);

    printf("w:%d\n", lv_obj_get_width(obj_1));
    printf("h:%d\n", lv_obj_get_height(obj_1));
}

例程3_// 基础对象的位置(position) 

void lvgl_demo(void)
{
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj,500, 300);
    lv_obj_set_x(obj, 200);
    lv_obj_set_y(obj, -50);
    //lv_obj_set_pos(obj, 1300, 600);
    //lv_obj_set_align(obj, LV_ALIGN_CENTER);
    //lv_obj_align(obj, LV_ALIGN_CENTER, 100, 100);

    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello, LVGL!");
    lv_obj_align_to(label, obj, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);

    //printf("w:%d\n", lv_obj_get_x(obj));
    //printf("h:%d\n", lv_obj_get_y(obj));
}

相关API:这几句都是用于调整对象位置的。

lv_obj_set_x(obj, 200);
lv_obj_set_y(obj, -50);
lv_obj_set_pos(obj, 1300, 600);
lv_obj_set_align(obj, LV_ALIGN_CENTER);
lv_obj_align(obj, LV_ALIGN_CENTER, 100, 100);

例程4_

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

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

相关文章

用平衡因子实现-AVL树

目录 AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转左单旋(parent->_bf 2 && cur->_bf 1)a,b,c当高度为0a,b,c当高度为1a,b,c当高度为2a,b,c当高度为...... 右单旋(parent->_bf -2 && cur->_bf -1)a,b,c当高度为0a,b,c当高度为1a,b,c当高…

UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流

程序化内容生成框架(Procedural Content Generation Framework,下文简称PCG)可谓是UE5.2版本中最令人瞩目的新技术之一,老王也是在第一时间就关注了这个技术,以前尝试过用Houdini来实现UE5中的程序化内容生成,感觉还是很蹩脚的,毕…

无线发射功率

无线电发射功率 无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去。电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈…

Linux系统编程(再论execve)

文章目录 前言一、execve的第三个参数二、进程空间三、命令行参数规范四、optstring规则的扩展定义总结 前言 本篇文章我们继续来研究一下execve这个系统调用,上篇文章已经讲解了前两个参数的意义了,那么这篇文章就来讲解一下第三个参数的具体含义。 一…

三分钟学习一个python小知识4-----------我的对python中numpy的理解, 我列举了关于numpy常用的10个例子来深入理解numpy

这里写目录标题 1、NumPy是什么2、NumPy的常见应用---必须掌握2.1.创建一个数组2.2.数组的属性2.3.取数组中的元素2.4.数组的运算2.5.数组的转置2.6. 数组的索引和切片2.7. 数组的重塑2.8. 数组的广播2.9. 数组的聚合操作2.10. 数组的排序 总结 1、NumPy是什么 NumPy是专门用于…

vue+elementui实现app布局小米商城,样式美观大方,功能完整

目录 一、项目效果在线预览 二、效果图 1.首页效果图 2.分类,动态分类商品数据根据所属分类动态切换 3.购物车,动态添加购物车(增、删、改、查) 4.我的 5.登录注册 6.商品详情 7.搜索(动态模糊搜索、搜索历史…

12---整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…

文件上传漏洞-用骗子的角度分析

(一)文件上传漏洞 文件上传漏洞,发送在用户上传文件功能中,很多网址都对上传的文件格式进行限制,但是被攻击机者找到漏洞,把木马、病毒进行上传,然后控制服务器。对上传的文件格式不是不限制&a…

MySQL实战解析底层---为什么这些SQL语句逻辑相同,性能却差异巨大

目录 前言 案例一:条件字段函数操作 案例二:隐式类型转换 案例三:隐式字符编码转换 前言 在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句对这些语句使用不当的话,就会不经意间导致整个数据…

动态规划V (85、91、97)-最近都开始摆烂

CP85 最大矩形 题目描述: 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 学习记录: 对每一个地方都去统计最大举行的话,会有很多多余的计算,题…

windows操作系统线程结构体

上一篇我们介绍了进程结构体,这节我们介绍下线程结构体:ETHREAD。还是去windbg里面去看一下这个结构体的长相: 依旧是一大堆成员,我们只关注一些比较重要的结构体成员。在进程结构体中的第一个成员是一个子结构体Pcb,在线程结构体中&#xff…

【Simulink】基于FCS-MPC的带阻感负载的三相逆变器控制(Matlab Function)

之前写过三相并网逆变器FCS-MPC的博客 👉【Simulink】基于FCS-MPC的三相并网逆变器控制(Matlab Function) 应用的对象是并网的,用一个电压源(Three-Phase Programmable Voltage Source)模拟交流电网。 本篇…

6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(7)

0.briefly speaking 之前我们研究过Xv6中的陷阱机制,并搞懂了系统调用的全部流程,接下来我们以UART和console为研究对象,深入研读一下Xv6内核中有关设备中断驱动的代码,并对UART、shell、console、键盘、显示器等设备的协同运作过…

【算法总结】——排列型回溯

文章目录 排列型回溯例题1——46. 全排列例题2——N皇后 分析回溯时间复杂度的另一种技巧 排列型回溯 相比于组合,排列型回溯对于元素的顺序是有要求的。 为了告诉回溯下面还可以选择哪些数字,可以: 记录已经被选择的数字用一个集合存储还…

【Linux】16. 动静态库

1. 库概念的引出 但是如果只是单纯的将多个.o文件提供给使用者,那么如果.o文件过多链接就会变得非常复杂,于是我们考虑将所有的.o文件打包给使用者提供一个库文件即可。 库的本质就是.o文件的集合 2. 动静态库概念 在之前的学习过程中我们认识到动静态…

免费:5000个高清视频素材 (个人免费版权,含9个利基)

免费:5000个高清视频素材 (个人免费版权,含9个利基) 嘿!你喜欢制作视频吗?总是在寻找一些酷炫的素材,但又担心会侵犯版权吗?别担心,我有一个超级好消息要告诉你!现在,我…

代码随想录算法训练营第39天 | 62.不同路径 + 63.不同路径 II

今日任务 目录 62.不同路径 - Medium 63.不同路径 II - Medium 62.不同路径 - Medium 题目链接:力扣-62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器…

【数据结构】排序

插入排序 把当前遍历到的元素前的元素序列是排好序的,把当前元素放到前边的序列中进行排序。 直接插入排序 不带哨兵 void InsertSort(int A[],int n) { int i,j,temp; for(i1;i<n;i) if(A[i]<A[i-1]) { tempA[i]; for(ji-1;j>0 && A[j]>temp;--j) A[j…

深入理解深度学习——BERT派生模型:参数共享ALBERT

分类目录&#xff1a;《深入理解深度学习》总目录 预训练语言模型的一个趋势是使用更大的模型配合更多的数据&#xff0c;以达到“大力出奇迹”的效果。随着模型规模的持续增大&#xff0c;单块GPU已经无法容纳整个预训练语言模型。为了解决这个问题&#xff0c;谷歌提出了ALBE…

深度学习训练营之文本分类识别

深度学习训练营之文本分类识别 原文链接环境介绍前置工作设置环境设置GPU加载数据 构建词典生成数据批次和迭代器模型定义定义实例 定义训练函数和评估函数模型训练模型评估 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考…