LVGL学习笔记5 - Display, Screen和Layer

news2025/1/11 22:50:21

目录

1. Display

2. Screen

2.1 创建Screen

2.2 加载Screen

2.3 获取活动的Screen

2.4 实例

2.4.1 定义2个Screen全局变量

2.4.2  初始化Screen

2.4.3  循环更替

3. Layer图层

3.1 切换顺序

3.2 顶层和系统层

3.3 实例

3.3.1 创建全局变量

3.3.2 初始化

3.3.3 循环更替处理


1. Display

在移植那里会有一个显示接口的移植,这部分其实对应的就是Display,可以翻译为显示器。在LVGL中,可以有多个Display,即物理上支持多个显示器。这些显示器的颜色深度都是由LV_COLOR_DEPTH决定的,即这些显示器的图像数据格式都是一样的,尽管这些显示器可能有彩色的和黑白的,所以需要在驱动的flush_cb中转换成正确的格式。

对于大部分的应用,可能只有一个显示器,这部分不用处理,对于需要传递display的参数都设置为NULL即可。

2. Screen

Screen是基于Display的一个对象,相当于一个容器,用来放置其他对象。

2.1 创建Screen

Screen可以从任何类型的Object创建,但是有两种常见的类型:Base Object和Image。

lv_obj_t * scr = lv_<type>_create(parent)

参数parent表示父对象。

Base Object和Image类型的Screen的创建函数是:lv_obj_create和lv_img_create

2.2 加载Screen

void lv_scr_load(lv_obj_t * scr)

加载Screen也即将Screen里面的内容显示出来。

2.3 获取活动的Screen

lv_obj_t * lv_scr_act(void)

2.4 实例

 设置2个Screen,不停的切换2个Screen。

2.4.1 定义2个Screen全局变量

static lv_obj_t* gTestScreen1;
static lv_obj_t* gTestScreen2;

2.4.2  初始化Screen

    gTestScreen1 = lv_obj_create(NULL);
    gTestScreen2 = lv_obj_create(NULL);

    lv_obj_t* rect1 = lv_obj_create(gTestScreen1);
    lv_obj_set_size(rect1, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect1, LV_ALIGN_TOP_LEFT, 20, 20);

    lv_obj_t* rect2 = lv_obj_create(gTestScreen2);

    lv_obj_set_size(rect2, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect2, LV_ALIGN_TOP_LEFT, 220, 20);

    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_bg_color(&style, lv_palette_main(LV_PALETTE_GREY));
    lv_obj_add_style(rect2, &style, LV_STATE_DEFAULT);
    lv_scr_load(gTestScreen1);

创建2个Screen,一个Screen在(20,20)显示白色框,一个Screen在(220,20)位置显示灰色框。

2.4.3  循环更替

void testLoop(void)
{
    static uint32_t loopCnt = 0;
    static uint8_t loopFlag = 0;

    if (((++loopCnt) % 100) == 0)
    {
        if (lv_scr_act() != gTestScreen1)
        {
            lv_scr_load(gTestScreen1);
        }
        else
        {
            lv_scr_load(gTestScreen2);
        }
    }
}

循环加载2个Screen,然后在while循环中调用。

    while (!lv_win32_quit_signal)
    {
        lv_task_handler();
        testLoop();
        Sleep(1);
    }

3. Layer图层

每个对象对应一个图层。每个图层可以覆盖,改变图层顺序。后出现的对象总是覆盖前面的对象。

3.1 切换顺序

void lv_obj_move_foreground(lv_obj_t * obj)

将对象移动到最前面,即它会覆盖其他的对象。

void lv_obj_move_background(lv_obj_t * obj)

将对象移动到背景,即其他对象会覆盖它。

void lv_obj_move_to_index(struct _lv_obj_t * obj, int32_t index);

将对象移动到其父对象中的给定索引。参数index是索引值,有效值-lv_obj_get_index(obj)到lv_obj_get_index(obj) - 1。index为正负值时表示移动的方向。

3.2 顶层和系统层

顶层和系统层是LVGL的特殊层。这2个层在Display的所有Screen都是可见的。 顶层始终位于默认屏幕的顶部,而系统层位于 顶层的顶部。

用户可以使用顶层来创建一些随处可见的内容。例如,菜单栏、弹出窗口等。如果启用了click 属性,那么顶层将吸收所有用户点击并充当模态。

系统层也用于LVGL 的类似目的。例如,它将鼠标光标放在所有图层上方以确保它始终可见。

获取顶层和系统层句柄的方式:

lv_obj_t * top = lv_layer_top();
lv_obj_t * sys = lv_layer_sys();

3.3 实例

3.3.1 创建全局变量

lv_obj_t* rect1;
lv_obj_t* rect2;
lv_obj_t* rect3;
lv_obj_t* label;

3个矩形和一个Label。

3.3.2 初始化

    static lv_style_t style1, style2;

    rect1 = lv_obj_create(lv_scr_act());
    rect2 = lv_obj_create(lv_scr_act());
    rect3 = lv_obj_create(lv_scr_act());

    lv_obj_set_size(rect1, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect1, LV_ALIGN_TOP_LEFT, 20, 20);
    
    lv_style_init(&style1);
    lv_style_set_bg_color(&style1, lv_palette_lighten(LV_PALETTE_GREY, 1));
    lv_obj_add_style(rect2, &style1, LV_STATE_DEFAULT);
    lv_obj_set_size(rect2, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect2, LV_ALIGN_TOP_LEFT, 70, 20);

    lv_style_init(&style2);
    lv_style_set_bg_color(&style2, lv_palette_lighten(LV_PALETTE_GREEN, 1));
    lv_obj_add_style(rect3, &style2, LV_STATE_DEFAULT);
    lv_obj_set_size(rect3, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect3, LV_ALIGN_TOP_LEFT, 120, 20);

    label = lv_label_create(lv_scr_act());
    lv_obj_set_size(label, LV_PCT(20), LV_PCT(20));
    lv_obj_align(label, LV_ALIGN_TOP_LEFT, 120, 120);
    lv_label_set_text(label, "0");

3个矩形框显示不同的颜色,Label显示第几步。

3.3.3 循环更替处理

void testLayerLoop(void)
{
    static uint32_t loopCnt = 0;
    static uint8_t loopFlag = 0;

    if (((++loopCnt) % 1000) == 0)
    {
        switch (loopFlag)
        {
            case 0:
                lv_obj_move_foreground(rect1);
                lv_label_set_text(label, "0");
                break;
            case 1:
                lv_obj_move_foreground(rect2);
                lv_label_set_text(label, "1");
                break;
            case 2:
                lv_obj_move_foreground(rect3);
                lv_label_set_text(label, "2");
                break;
            case 3:
                lv_obj_move_background(rect3);
                lv_label_set_text(label, "3");
                break;
            case 4:
                lv_obj_move_background(rect2);
                lv_label_set_text(label, "4");
                break;
            case 5:
                lv_obj_move_background(rect1);
                lv_label_set_text(label, "5");
                loopFlag = (uint8_t)-1;
                break;

        }
        loopFlag++;
    }
}

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

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

相关文章

【OpenFOAM】-olaFlow-算例5- oppositeSolitariesFlume

算例路径&#xff1a; olaFlow\tutorials\oppositeSolitariesFlume 算例描述&#xff1a; 两列反向的孤立波相互作用 学习目标&#xff1a; 熟练掌握olaFlow的造波设置&#xff0c;波浪方向与消波方向设置 算例快照&#xff1a; 图1 两列反向孤立波相互作用文件结构&#xff1…

Linux Kernel 远程代码执行漏洞(CVE-2022-47939)

Linux Kernel 远程代码执行漏洞&#xff08;CVE-2022-47939&#xff09; CVE-2022-47939 据Security Affairs消息&#xff0c;近期披露的一个严重 Linux 内核漏洞会影响 SMB 服务器&#xff0c;可能导致远程代码执行。 Linux Kernel SMB2_TREE_DISCONNECT 命令处理中存在远程…

C进阶:征服指针之指针与数组强化笔试题练习(2)

&#x1f432;&#x1f996; 本篇文章是接上篇文章的&#xff0c;上篇文章链接&#xff1a;http://t.csdn.cn/RogqL 目录 &#x1f407;&#x1f431;一.关于 strlen 函数与数组、指针的综合笔试题 &#x1f638;T1. &#x1f406; T2. &#x1f405;T3. &#x1f432;一.关…

网络和通信安全中的SSL/TLS国密改造

2021年3月&#xff0c;国家市场监管总局、国家标准化管理委员会发布公告&#xff0c;国家密码应用与安全性评估的关键标准GB/T39786—2021《信息安全技术信息系统密码应用基本要求》&#xff08;以下简称“GB/T39786”&#xff09;正式发布&#xff0c;GB/T 39786是贯彻落实《中…

CSS浮动与CSS定位装饰 Day3

结构伪类选择器 结构伪类 公式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪类</title><style>li:nth-child(4n){background-color: red;}</style> </head> <body>…

【记录贴】项目经理的进阶日常:靠年终总结获得了核心项目的机会

进入项目经理这个岗位已经三年了&#xff0c;之前决定转行做项目经理是因为它涉及的知识面广&#xff0c;对个人的成长非常有帮助&#xff1b;也期望未来能积累一些大型且复杂的项目经验、获得更好的升职空间。但现在做了这么久&#xff0c;好像遇到了职业瓶颈&#xff0c;仿佛…

ESP8266 WIFI模块的使用

ESP8266 wiFI 可以用作连接周边的无线设备&#xff0c;也可以作为发送器供其他设备连接通常在产品中&#xff0c;我们经常用作无线的接收使用&#xff0c;也可能会用作在线升级使用等。 说点题外话&#xff1a;虽然在线升级已经较为成熟&#xff0c;但我不推荐在一些重要的产品…

Shell程序编写猜数字的小游戏

文章目录 目录 文章目录 前言 一、设计思路 二、代码编写 三、效果图 总结 前言 在学习Linux课程中学习了一点简单的shell语法&#xff0c;实现了一个猜数字功能的程序。感兴趣的可以看完后自己手动编写玩玩~这个小游戏的编写也是把基础的shell语法基本上都用到了&#…

在QQ音乐巅峰榜年度榜单中,听懂国人2022年的音乐记忆!

拐左为夏&#xff0c;拐右为冬&#xff0c;时至年末&#xff0c;各类形式的年终报告层出不穷。2022年&#xff0c;是特殊的一年&#xff0c;音乐作为不可或缺的一部分&#xff0c;也陪伴广大用户走过了日日夜夜。一首首歌曲拨动着心弦、同时也承载着回忆&#xff0c;熟悉的旋律…

【软件测试】不好,事搞大了,APP测试的血泪教训总结......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 听说&#xff0c;人…

C语言链表-记录学生信息

题目要求&#xff1a; 创建一个 单向链表 来记录学生信息&#xff0c;人数3–5人&#xff1b;链表结点为结构变量&#xff0c;结构的要求如下&#xff1a; struct stu_info{char stu_num[10]; //学号char stu_name[8]; //姓名char stu_sex[2]; //性别int stu_score /…

Flowable学习笔记(二):flowable实战

1.定义流程模板 (1)Call Activity&#xff08;调用活动&#xff09; 在这个流程图中&#xff0c;定义了一个开始节点、调用活动节点和结束节点&#xff08;bpmn.xml文件在文章最后附上&#xff09;。 开始节点&#xff1a;定义了一个执行监听器&#xff08;commonStartExecut…

【MyBatis】进一步理解choose、when、otherwise标签

choose、when、otherwise choose里面包含when、otherwise两个标签&#xff0c;choose是父标签&#xff0c;when和otherwise必须都要写在它里面 当 when 中有条件满足的时候&#xff0c;就会跳出 choose&#xff0c;即所有的 when 和 otherwise 条件中&#xff0c;只有一个会输…

半导体设备中制冷系统的压力和温度准确控制解决方案

摘要&#xff1a;针对半导体低温工艺中制冷系统在高压防护和温度控制中存在的问题&#xff0c;本文将提出一种更简便有效的解决方案。解决方案的核心是在晶片托盘上并联一个流量可调旁路&#xff0c;使制冷剂在流入晶片托盘之前进行部分短路。即通过旁路流量的变化调节流出晶片…

罗切斯特大学将研究未来执行军事任务的量子计算

罗切斯特大学的专家将开发受量子启发的求解器系统&#xff0c;以解决军事任务中的实际问题。 美国军事研究人员需要使用量子启发求解器系统的量子计算技术&#xff0c;将高性能计算性能提高至少两个数量级的新方法。于是&#xff0c;他们从纽约的罗切斯特大学找到了解决方案。美…

Akka 进阶(三)Route 路由

目录一 路由Actor二 Pool方式的方式创建路由三 Group方式创建路由消息可以通过多种方式送达目的地&#xff0c;比如tell、ask、forward等&#xff0c;这些方式是最常规也是最简单的&#xff0c;但是对于复杂的消息投递逻辑&#xff0c;比如轮询投递、随机投递、广播组等&#x…

IB课程预估分,请认真规划学习进程

近年受疫情影响&#xff0c;IB考试形式与分数情况&#xff0c;有不小的波动&#xff0c;年度出分依然吸引着众人目光。尤其明后年准备参加大考的同学&#xff0c;更关心实战难度和考试分数的变化趋势。 01预估分&#xff1a;严重被压低的预期分数 全球疫大环境下&#xff0c;IB…

合宙 ESP32C3 烧录 Micropython 后连接端口报错

合宙esp32c3 开发板烧录micropython 后连接VScode 或 Thonny报错&#xff1a; Device is busy or does not respond. 1. 原因&#xff1a; 烧录的micropython bin文件有问题。 问题参考&#xff1a; 链接: 合宙ESP32-C3 烧录Micropython报错入坑记 2. 解决办法&#xff1a…

H3C smart-link实验 C套拆解

H3C smart-link实验 C套拆解一、项目拓扑二、项目需求三、配置步骤1.vlan-trunk2.STP3.smart-link四、测试一、项目拓扑 二、项目需求 总部局域网内sw3进行双上行链路灵活备份&#xff0c;smart-link组1 引用实例1(绑定vlan10)的流量从经过sw1的链路通向出口路由器r1&#xff…

10个优秀的Python库,实用且有趣

序言 哈喽兄弟们&#xff0c;今天分享10个优秀的Python库&#xff0c;超级实用&#xff01; 为什么这么多人选择学习python?首先&#xff0c;python是一门全场景编程语言&#xff0c;对于初学编程的人而言&#xff0c;选择一门全场景编程语言是非常不错的选择;其次&#xff…