当前位置: 首页 > article >正文

lvgl | guider应用笔记

字体数据生成

采用guider工具,
步骤如下;

  • 在顶部菜单栏中,选择Resource Mannager 选择 font
  • 然后导入字库文件ttf

层级

在开发UI界面的过程中,有时候,要求有图片分层的概念。
具体就是后创建的元素,在图层最上层

LVGL(Light and Versatile Graphics Library)是一个轻量级的嵌入式图形库,它支持多种显示设备。在 LVGL 中,图片确实有层级的概念。

当你创建一个对象(如图像、按钮等)时,你可以指定它的父对象。这样,子对象就会相对于其父对象进行定位和绘制。通过这种方式可以控制不同对象的显示顺序和覆盖关系。

例如:

lv_obj_t * parent = lv_cont_create(NULL, NULL); // 创建一个容器作为其他对象的父对象
lv_obj_set_size(parent, 100, 100); // 设置父容器的大小

// 在这个容器中创建一个新的图像
lv_img_t * img1 = lv_img_create(parent, NULL);
lv_img_set_src(img1, &my_image_symbol);

// 创建另一个图像,并将其放置在第一个图像之上
lv_img_t * img2 = lv_img_create(parent, NULL);
lv_img_set_src(img2, &my_image_background);

在这个例子中,img1 和 img2 是兄弟元素,它们都位于同一个父容器内。默认情况下,后添加的对象会覆盖先前添加的对象。如果你想要改变它们的层级关系(即哪个在上面),可以使用 lv_obj_move_foreground() 或者 lv_obj_move_background() 函数来调整特定对象的 Z-order。

使用 lv_obj_move_foreground(obj) 可以将某个对象移动到最前面。
使用 lv_obj_move_background(obj) 可以将某个对象移动到最后面。
因此,在 LVGL 中你可以通过设置不同的Z-order来管理图片和其他GUI组件之间的显示层级。


页面切换

元素显示、隐藏

lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN)
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN)

新页面加载API lv_scr_load

lv_scr_load(scr) : 表示适不适用任何动画,而直接加载动画

在guider中,代码生成器中,生成的页面切换代码如下:

/* 未选中Delete current screen */
lv_obj_t * act_scr = lv_scr_act();
lv_disp_t * d = lv_obj_get_disp(act_scr);
if (d->prev_scr == NULL && (d->scr_to_load == NULL || d->scr_to_load == act_scr))
	{
	if (guider_ui.screen_2_del == true)
		setup_scr_screen_2(&guider_ui);
		lv_scr_load_anim(guider_ui.screen_2, LV_SCR_LOAD_ANIM_NONE, 100, 100, false);
		guider_ui.screen_1_del = false;
	}
}

原理解析:
(1)lv_obj_t * act_scr = lv_scr_act():获取当前屏幕中正在显示的页面的lv_obj_t类型的指针
(2)lv_disp_t * d = lv_obj_get_disp(act_scr);:获取当前屏幕对象关联的显示器对象
(3)d->prev_scr == NULL

LVGL支持页面切换动画,如从左到右切换,prev_scr就用作于此。当prev_scr不为NULL时,表示当前屏幕对象正在进行切换动画,并且可以通过prev_scr引用到前一个屏幕对象。当prev_scr为NULL时才能切换页面,这样做是为了防止在动画执行过程中对前一个屏幕对象进行删除操作,以及避免可能的资源冲突或不一致性

(4)(d->scr_to_load == NULL || d->scr_to_load == act_scr)
只有在scr_to_load 等于NULL或act_scr时才能切换页面。NULL表示当前没有在执行切换页面的动画(已经执行完毕),act_scr表示当前正处于从别的页面切换为当前页面的过程中。其它情况下,如当前页面1(act_scr)正准备切换到页面2时,执行切换到页面3是不被允许的。

(5)lv_obj_clean
表示在载入新的页面之前,删除当前页面的所有子对象。但当lv_scr_load_anim的最后一个参数为true时,会在下一次切换屏幕时调用lv_obj_del删除前一个页面及其子对象。但实际上我们先删除其子对象也不影响动画切换的效果,这是因为子对象已经绘制在act_scr中了,我们只需要当前页面的一个显示状态即可完成动画的过渡效果。



http://www.kler.cn/a/305545.html

相关文章:

  • 场景解决之mybatis当中resultType= map时,因某个字段为null导致返回的map的key不存在怎么处理
  • 常用中间件介绍
  • 【数理哲学】决定论与混沌理论
  • mysql 快速解决死锁方式
  • 「QT」几何数据类 之 QLine 整型直线类
  • LLMs:MindFormers的简介、安装和使用方法、案例应用
  • java项目之网上商城系统设计与实现(源码+文档)
  • Tomcat_WebApp
  • 020、二级Java选择题综合知识点(持续更新版)
  • 树莓派Pico2(RP2350)开发环境搭建
  • Linux内核初始化过程中加载TCP/IP协议栈
  • ios xib 子控件约束置灰不能添加约束
  • 【modou网络库】Reactor架构与TCP通信机制分析
  • 基于hispark_taurus开发板示例学习OpenHarmony编译(1)
  • 记录工作中遇到的问题(持续更新~)
  • TikTok云手机解决运营效率低、封号问题
  • QT消息对话框学习
  • 用户登陆网址都发生了什么?
  • 网络原理1-传输层
  • [mysql]mysql的运算符
  • it基础软件运维管理:从操作系统到数据库,再到中间件和应用系统
  • 测试ASP.NET Core的WebApi项目调用WebService
  • 血缘解析<二>:如何解析带CTE语句的Sql
  • [机器学习]决策树
  • Parallels Desktop 20 for Mac中文版发布了?会哪些新功能
  • 学习笔记-Golang中的Context