5、LVGL标签和样式_embedded_w的博客-程序员秘密_lvgl样式

技术标签: LVGL  

LVGL标签和样式

LVGL标签

标签本身是使用的最多的一个空间,主要作用是用来显示文本信息的.支持换行,图标字体,部分文本重绘色,长文本显示等.

标签API接口

API接口很多,在原子的资料里也写得很清楚,只罗列一些我常用的API.

  1. lv_label_set_text_fmt

    使用方法和printf很接近,示例:
    lv_label_set_text_fmt(now_label, "%d", (val_last));,需要注意的是,这个文本内容是动态文本,真正显示内容的内存空间是lvgl自己分配的.

  2. lv_label_set_align(lv_obj_t * label, lv_label_align_t align)

    设定文本对齐方式,共三种方式,左右对齐和剧中对齐.
    LV_LABEL_ALIGN_LEFT LV_LABEL_ALIGN_CENTER LV_LABEL_ALIGN_RIGHT

  3. lv_label_set_recolor(lv_obj_t * label, bool en)

    文本重绘色功能是否打开.

  4. lv_label_set_style(lv_obj_t * label, lv_label_style_t type, const lv_style_t * style)

    设定传入label对象的style,type目前只有LV_LABEL_STYLE_MAIN一个选项.

LVGL样式

简单理解,样式基本等价于控件的共有属性,比如颜色,宽度等.但是有些特殊的控件拥有一些特殊的属性,比如圆角半径,边框透明度等,所以LVGL里的样式包含大量属性,对于一些控件来说,必然会存在一些冗余而用不到的属性.

LVGL样式数据结构

如下所示,图来自于原子的资料,一共分为5大块.

LVGL_STYLE_DATA_STRUCTE

style.body

body是背景的属性,比如绘制按钮,属性框等.

  1. main_colorgrad_color分别为背景板的上半部分颜色和下半部分颜色,如果两者颜色不等,LVGL内部会对做出一个上半部分到下半部分的颜色渐变效果.
  2. radius设定背景板的圆角半径.
  3. opa设定该面板的透明属性,当透明度比较低的时候可以看到后面的内容.
  4. board设定面板边框属性.
    • part是绘制哪几条边框.
    • opa是边框透明度(0-255).
  5. shadow设定阴影效果
    • type 阴影的类型,是四周全部阴影还是只是底部阴影(只有两个选择).
  6. padding内边距,四个方向距离对象的距离.
    • inner 是容器内每个对象的间隔,和字体的间隔不一样.

以下图为例.
20201228225146
途中黄色部分是阴影效果.
绿色部分是边框效果.
红黑色部分为main_colorgrad_color效果.
四个角的弧度为radius设定的效果.

style.text

文本的属性,各个成员变量也比较好理解.说一下下面两个.

  1. letter_spcae 是字母间的间隔
  2. line_space 是行与行之间的间隔

style.image

图像的属性,这个要记录一下.

  1. colorintense

    指定混合颜色和混合强度,将图片的每一个像素点与指定颜色按照指定强度混合产生新的像素点数据.
    intense属性取值范围0-255.

  2. opa

    图像的透明度,取值范围0-255.

备注: 以上图举例,屏幕中间的闹钟图片当intense为200时,比较偏向于红色,当intense为1时,基本无限趋近于白色.

style.line

属性从字面意思就可以得知.说一下rounded,为1代表末尾用圆角绘制.如下图.

20201228230250

style.glass

这个比较简单,当为1时,子对象无法从父对象继承样式.为0时,子对象如果样式为NULL,则从父对象继承样式.

样式的使用

在LVGL里面内置了13个系统自带样式.效果如下所示.

20201228230940

备注: 这些系统内置样式的glass都为1,意味着这些样式无法被继承.

样式相关的API使用最多的是下面几个.

  • lv_style_copy(lv_style_t * dest, const lv_style_t * src)

    src的样式拷贝到dest中.

  • lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)

    设定对象的样式,如果不是基础对象则使用lv_xxx_set_style(lv_obj_t *obj, lv_xxx_style_t type, const lv_style_t * style)

  • lv_obj_refresh_style(lv_obj_t * obj)

    通知obj对象,样式已经改变,刷新样式,如果不调用,则下次运行lv_task_handler()的时候才会刷新.

    下面给出一个例子.

     lv_obj_t* bg_img = lv_img_create(lv_scr_act(), NULL);
     lv_img_set_src(bg_img, "S:./alarm_clock.bin");
     lv_obj_align(bg_img,NULL,LV_ALIGN_CENTER,0,0);
    
     static lv_style_t img_style;
     lv_style_copy(&img_style,&lv_style_plain);
     img_style.image.color = LV_COLOR_RED;
     img_style.image.intense = 200;
     lv_label_set_style(bg_img,LV_LABEL_STYLE_MAIN,&img_style);
    

    前三句是图片的显示,后面的就是图片的样式修改,主要用到了拷贝和设定样式.一般这两个也是最常用的函数.效果如下.

    20201228233938

    可以很清晰的看到,一个红色闹钟图标.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a986096115/article/details/112150092

智能推荐

【IL】IL入门_weixin_34240657的博客-程序员秘密

1.IL基本介绍1.1 CLR介绍在介绍IL之前,先说一说CLR。CLR的全称Commen Language Runtime 公共语言运行时。因为CLR的存在,使得多语言开发成为可能。下面给出一张图片,解释支持CLR的几种语言的关系。从上面的图片可以看出,CLR其实是不关心开发人员用哪一种语言写源代码。这意味着在选择编程语言时,应该选择最容易表达自己意图的语言。可用任何一种语言开发...

EasyPoi 使用_XXXG的博客-程序员秘密

1.在Maven中引入easypoi<!-- easypoi的支持 --><dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.2.0</ver...

A 45nm 1.3GHz 16.7 double-precision GFLOPS/W RISC-V processor with vector accelerators_zwconn的博客-程序员秘密

1、简介RISC-V 由Berkeley开发,完全开源的通用ISA,除了ISA外Berkeley还配套实现了RISC-V SOC开发框架chipyard,包括基于chisel语言SOC生成器,SOC FPGA仿真平台friesim,RISC-V应用开发编译工具链等工具。大多说论文提出的加速器,比如GPU,使用了独立的指令集,它们有着和CPU虚拟空间独立的内存空间,因此需要使用加速器ISA彻底修改应用,并且无法利用CPU的虚拟环境。RSIC-V可以灵活的拓展加速器并且不会牺牲CPU的虚拟环境。2、流片

开源一下AI核心代码~_ai源代码_Luyifei666的博客-程序员秘密

老样子,先看图,文末贴代码~myeclipse版的android studio 版的 是不是很简短啊?那么我贴一下源码吧~/** * AI核心代码 价值1个亿~ * @author BillyLu * */public class AiMain { public static void main(String[] args) { Scanner sc...

OO ALV 事件詳細使用(增加按鈕、增加下拉框等)_SAP剑客的博客-程序员秘密

report  Z_OOALV.type-pools: icon.class lcl_event_receiver definition deferred.tables: sflight.data:      gi_index_rows type

Help is needed for Dexter UVA - 11384_dexter is tired of dee dee_carut的博客-程序员秘密

问题分析可以分为n是偶数和奇数两种情况n是偶数,那么分为两部分1-n/2,n/2+1-n,后半部分减去n/2的值,就和前半部分一样了n是奇数,可以分为两部分1-n/2,n/2+1-n,后半部分减去n/2+1的值,就变成了0和1-n/2的值所以可以写出递推式f(n)=f(n/2)+1#include <iostream>#include <cstdio>usi...

随便推点

cordova插件之Local Notification(本地通知)_smile_panda的博客-程序员秘密

本地通知的基本目的是使应用程序能够通知用户,它为他们提供了一些信息例如,当应用程序没有在前台运行时,通知用户一个消息或即将到来的约会。本地通知大多是基于时间的,如果触发就会在通知中心显示并呈现给用户。

Opencv学习----图像处理-几何图像变换-cv::getAffineTransform(仿射变换)_charce_you的博客-程序员秘密

6.2.1 cv::getAffineTransform6.2.1.1 仿射变换(1)一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)。所以,我们能够用仿射变换来表示:旋转(线性变换) 平移(向量加) 缩放操作(线性变换)仿射变换代表的是两幅图之间的联系。我们通常使用矩阵来表示仿射变换。 ...

中介模式(转载)_新时代丘鸣山的博客-程序员秘密

一、引言  在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室、QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解。二、 中介者模式的介绍2.1 中介者模式的定义  从生活中的例子可以看出,不论是QQ游戏还是QQ群,它们都是充当一个中间平台,QQ用户可以登录这个中间平台与其他QQ用户进行交流,如果没有这些中间平台,我们如果想与朋...

html查看器可以看pas源码吗,查看源码: CheatEngine55src.rar_SynHighlighterHtml.pas - VerySource..._温义飞的博客-程序员秘密

{-------------------------------------------------------------------------------ThecontentsofthisfilearesubjecttotheMozillaPublicLicenseVersion1.1(the"License");youmaynotusethisfil...

5 年前他的一个设计思路,让 TDengine 时间压缩提升近 50 倍_tdengine 乱序_涛思数据(TDengine)的博客-程序员秘密

作为创始团队成员之一,廖浩均在 2017 年就正式加入了涛思数据,彼时整个团队才不过寥寥五个人,TDengine 也才诞生不久。作为一位毕业于中科院计算所的计算机应用技术专业博士,廖浩均为什么会决定从一家稳定的上市企业转移阵地到一家数据库初创公司?在进入涛思数据之后,他又见证和参与了 TDengine 的哪些改变与进步?立足当下展望未来,携手 TDengine,他会如何走好接下来的路?在对廖浩均的采访记录中,这些问题的答案也已经跃然纸上。......

Oracle索引(Index)创建使用_zEthan的博客-程序员秘密

Oracle对象教程:索引(Index)创建使用,索引:对数据库表中的某些列进行排序,便于提高查询效率。当我们在某本书中查找特定的章节内容时,可以先从书的目录着手,找到该章节所在的页码,然后快速的定位到该页。这种做法的前提是页面编号是有序的。如果页码无序,就只能从第一页开始,一页页的查找了。数据库中索引(Index)的概念与目录的概念非常类似。如果某列出现在查询的条件中,而该列的数据是无序的,查询...

推荐文章

热门文章

相关标签