LVGL学习笔记4 - 主题Themes

news2024/11/26 0:35:19

目录

1. 获取主题句柄

2. 设置基础主题

3. 设置主题的回调函数

4. 使能主题

5. 实例

5.1 定义一个全局Style变量

5.2 显示默认主题风格的矩形

5.3 初始化新主题的样式

 5.4 初始化新主题

 5.5 回调函数的实现

 5.6 设置新主题

5.7 显示


主题是风格的集合。对应的变量结构体是lv_theme_t。定义一个主题也必须是全局变量或者静态的。

1. 获取主题句柄

lv_theme_t  * lv_theme_get_from_obj(lv_obj_t * obj);

参数含义:

obj - 对象句柄,如果是NULL,则获取的是默认主题。

2. 设置基础主题

为主题设置基础主题。基础主题中的样式将添加到当前主题的样式之前。通过设置基本主题,可以创建任意长的主题链。

void lv_theme_set_parent(lv_theme_t * new_theme, lv_theme_t * parent);

参数含义:

new_theme - 新主题句柄

parent - 基础主题句柄

3. 设置主题的回调函数

回调函数用于向不同对象添加样式。

void lv_theme_set_apply_cb(lv_theme_t * theme, lv_theme_apply_cb_t apply_cb);

参数含义:

theme - 被设置回调函数的主题句柄

apply_cb - 回调函数

typedef void (*lv_theme_apply_cb_t)(struct _lv_theme_t *, lv_obj_t *);

4. 使能主题

void lv_disp_set_theme(lv_disp_t * disp, lv_theme_t * th);

设置显示器的主题。

参数含义:

disp - 显示器句柄

th - 主题句柄

5. 实例

画3个矩形框,第一个是默认主题的风格,另外2个是新的主题。

5.1 定义一个全局Style变量

static lv_style_t gThemeRectStyle;

5.2 显示默认主题风格的矩形

lv_obj_t* rect = lv_obj_create(lv_scr_act());

lv_obj_set_size(rect, LV_PCT(20), LV_PCT(20));
lv_obj_align(rect, LV_ALIGN_TOP_LEFT, 20, 20);

5.3 初始化新主题的样式

/*Set a background color and a radius*/
lv_style_init(&gThemeRectStyle);
lv_style_set_radius(&gThemeRectStyle, 5);
lv_style_set_bg_opa(&gThemeRectStyle, LV_OPA_COVER);
lv_style_set_bg_color(&gThemeRectStyle, lv_palette_lighten(LV_PALETTE_GREY, 1));

/*Add a shadow*/
lv_style_set_shadow_width(&gThemeRectStyle, 55);
lv_style_set_shadow_color(&gThemeRectStyle, lv_palette_main(LV_PALETTE_BLUE));

lv_style_set_radius设置半径,对于矩形是四个边角的弧形大小。改成15后显示效果:

lv_style_set_bg_opa设置背景的透明度。LV_OPA_COVER是无透明度,覆盖。改为50%透明度LV_OPA_50的显示效果:

lv_style_set_bg_color设置背景颜色。lv_palette_lighten(LV_PALETTE_GREY, 1)是LVGL预设颜色值,LV_PALETTE_GREY表示灰色,第二个参数表示亮度,有效值1-5。改为LV_PALETTE_ORANGE和3的显示效果:

lv_style_set_shadow_width设置阴影的宽度。改为10、20、40后显示的效果依次如下:

 

 lv_style_set_shadow_color设置阴影的颜色。改为LV_PALETTE_RED的显示效果:

 5.4 初始化新主题

/*通过当前主题初始化新主题*/
lv_theme_t* th_active = lv_theme_get_from_obj(NULL);
static lv_theme_t th_new;
th_new = *th_active;

/*设置父主题和新主题的样式适播放回调函数*/
lv_theme_set_parent(&th_new, th_active);
lv_theme_set_apply_cb(&th_new, new_theme_apply_cb);

 5.5 回调函数的实现

static void new_theme_apply_cb(lv_theme_t* th, lv_obj_t* obj)
{
    if (lv_obj_check_type(obj, &lv_obj_class))
    {
        lv_obj_add_style(obj, &gThemeRectStyle, LV_STATE_DEFAULT);
    }
}

通过lv_obj_check_type判断对象类型,只有对应的对象才使用对应的Style。对象类型可以参考文件lv_theme_basic.c中的函数theme_apply,里面有一组if判断各个对象类型。

 5.6 设置新主题

lv_disp_set_theme(NULL, &th_new);

5.7 显示

    lv_obj_t* rect2 = lv_obj_create(lv_scr_act());

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

    lv_obj_t* rect3 = lv_obj_create(lv_scr_act());

    lv_obj_set_size(rect3, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect3, LV_ALIGN_TOP_LEFT, 420, 20);

当设置了新的主题后,显示所有的lv_obj_class部件都会采用新主题的风格显示。

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

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

相关文章

设计模式--reactor 模式

说明 本文基于 tomcat 8.5.x 编写。author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 介绍 reactor 模式通常应用于网络 IO 场景,高性能的中间件 redis, netty 都在使用。 背景 原始的网络 IO 模型 最原始的网络 IO 模型,服务…

Java学习笔记【8】异常

⛵ ⛵ ⛵ ⛵ ⛵ 🚀 🚀 🚀 🚀 🚀   大家好🤝,我是 👉老孙👈,未来学习路上多多关照 🤝 一个喜欢用 ✍️ 博客记录人生的程序猿 🙉&…

Python遥感图像处理应用篇(二十七):Python绘制遥感图像各波段热力图(相关系数矩阵)(续)

续-https://soderayer.blog.csdn.net/article/details/125757807 上一篇中使用csv文件计算的相关系数热力图,本篇我们直接使用遥感图像来计算图像波段之间的相关系数。 方法一:已有软件ENVI计算 实际上,目前已有的软件,如ENVI就可以直接计算图像波段之间的相关系数,该工…

【高精度定位】关于GPS、RTK、PPK三种定位技术的探讨

高精度定位通常是指亚米级、厘米级以及毫米级的定位,从市场需求来看,定位的精度越高往往越好。“高精度、低成本”的定位方案无疑将是未来市场的趋势。 在物联网时代,大多数的应用或多或少都与位置服务相关联,尤其是对于移动物体而…

深入理解MySQL——分库分表种类与原则

分库分表的种类 首先说明,这里所说的分库分表是指把数据库中数据物理地拆分到多个实例或多台机器上去,而不是MySQL原生的Partitioning。 这里稍微提一下Partitioning,这是MySQL官方版本支持的,在本地针对表的分区进行操作&#…

[Flask]各种子功能的实现

一、标准Flask架构搭建 ①config.py 新建一个文件config.py,在其中进行参数初始化,再使用下面代码加载到app.py(主程序)中 import config app.config.from_object(config) #由config.py初始化 ②exts.py 用于放置扩展模块&a…

(二十四)Vue之props配置项

文章目录props基本使用props的数组形式props的对象形式检测类型检测类型 其他验证Vue学习目录 上一篇:(二十三)Vue之ref属性 props props 可以是数组或对象,用于让组件接收外部传过来的数据 约定props是只读的,Vue…

开源 高性能 云原生!时序数据库 TDengine 上线亚马逊Marketplace

近日,涛思数据旗下开源、高性能、云原生的时序数据库(Time Series Database,TSDB)TDengine 成功上线亚马逊云科技 Marketplace,为用户提供了更加丰富的订阅渠道。 TDengine 是针对时序数据特点研发和优化的数据库解决方…

CentOS8 Elasticsearch8.x 安装遇到的问题解决汇总

报错清单 启动报错:ERROR: Elasticsearch exited unexpectedly curl测试报错:curl: (52) Empty reply from server 报错解决 启动报错 起因 使用archive方式安装elasticsearch后,在目录中运行./bin/elasticsearch报错如下: 原…

第二十七章 数论——快速幂与逆元

第二十七章 快速幂与扩展欧几里德算法一、快速幂1、使用场景2、算法思路(1)二进制优化思想(2)模运算法则3、代码实现(1)问题(2)代码二、快速幂求逆元1、什么是逆元?&…

结构体位段问题

每一位勇敢努力的少年,必将不负众望! 什么是位段 位段的详细解释 位段其实也是一种结构体的类型 1.位段的成员是 int ,short int unsigned int , signed int , short , char 类型 2.位段的成员名后有一个冒号和一个数字 看一个例子: st…

通过静态LSP、LDP LSP、MPLS TE三种方式实现总部与分支的互通

一、静态LSP 特点:类似静态路由,简单易用,手动建立lsp,定制转发路径,无需控制报文,资源消耗少。 缺点:不适合大型复杂拓扑,不能根据网络变化而动态调整,需要管理员手动调…

【jprofiler应用-oom原因定位】

1.安装jprofiler jprofiler_windows-x64_11_0_2.exe 2.使用KeyGen.exe生成注册码然后输入 3.idea中安装jprofiler插件 File-->Setting-->Plugins 搜索jprofiler插件然后安装 4.以一个内存溢出的程序为例子进行分析(一直分配内存,List容器引用着Student导致…

医疗产品设计的新趋势

随着个人健康和医疗数据技术的发展,消费者可以选择更多的方法来跟踪和管理他们的健康状况,因此医疗产品开始转向更多的健康预防领域。医疗器械设计公司认为,随着医疗产品设计从医疗产品转向家庭,医疗产品的设计需要考虑更多的新问…

【HTML+CSS+JavaScript】实现简单网页版的飞机大战

文章目录【HTMLCSSJavaScript】实现简单网页版的飞机大战一. HTML部分代码二. CSS部分代码三. JavaScript部分代码四. 完整的代码和图片获取【HTMLCSSJavaScript】实现简单网页版的飞机大战 本文分享的是键盘版飞机大战的代码,且文章末尾有惊喜。 效果图&#xff1a…

前端食堂技术周刊第 64 期:Node.js 19、Interop 2022、SvelteKit 1.0、2022 Web 性能回顾、最流行的 Node.js

美味值:🌟🌟🌟🌟🌟 口味:冰糖雪梨 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 Node.js 19 的新特性Interop 2022 年终更新SvelteKit 1.02022 Web 性能回…

Python爬虫学习第十二天---scrapy学习

Python爬虫学习第十二天—scrapy学习 一、scrapy的概念和流程 1、scrapy概念 Scrapy是一个Python编写的开源网络爬虫框架,它是一个被设计用于爬取网络数据、提取结构性数据的框架。Scrapy文档地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/…

采用抓包的方式逆向获得谷歌翻译的API

文章目录最开始的尝试2022.12.26谷歌翻译API相关信息发送网址提交的数据不过不出意外的失败了实验去掉参数去掉Headers代码对返回结果进行解析完整代码最开始的尝试 谷歌的翻译API老是发生变化,我们需要自己动手来找到谷歌的翻译API,这样才是最稳妥的解决…

个人博客系统(前后端分离)

努力经营当下,直至未来明朗! 文章目录一、项目简介二、项目效果三、项目实现1. 软件开发的基本流程2. 博客系统 需求分析3. 博客系统 概要设计4. 创建maven项目5. 编写数据库操作的代码四、项目代码总结普通小孩也要热爱生活! 一、项目简介 …

Mac 音频转换器推荐 DRmare Audio Converter、Audi Free Auditor

Mac 音频转换器推荐 DRmare Audio Converter、Audi Free Auditor 给大家推荐两款 Mac 上的音频转换器,这两款转换器都可以转换苹果音乐,iTunes歌曲或者一些常规的音轨到MP3, FLAC, WAV, M4A, AAC格式等等,转换后我们就可以在所有的设备和播放…