一、Line(线条)的概念

二、线条组件的使用

1、创建线条对象



2、设置点数组

line组件的实现原理就是通过连接两个点形成一条直线,。因此,在绘制多段线之前就要根据需求设置一组点,阅读LVGL官方文档可知,点必须存储在 lv_point_t 类型的数组中,并通过

void lv_line_set_points(lv_obj_t * obj, const lv_point_t points[], uint16_t point_num)

函数将数组传递给line对象。

示例代码:

需要注意的是,LVGL图形图会根据设置的点自动生成线段对象的大小,如果自行设置线段对象的大小,有可能造成部分线条不可显示。

3、确定y轴的方向(可选)

需要特别注意的是,点数组内的坐标默认是以线段对象的左上角为坐标原点,而非屏幕。默认y轴起点为上,即自上而下y值(纵坐标)增大。

若要改变y轴的方向则使用 void lv_line_set_y_invert()函数

若选择反转,则y轴起点为下,即自下而上y值(纵坐标)增大。

4、设置线条风格(可选)

4.1创建风格

要注意的是:虚线设置只能用于水平或垂直线段,否则会出现段错误!

4.2设置风格

5、将创建好的线段组件添加到父对象上

三、示例代码:

/*************************************************
*
* file name:widget_line.c
* author :momolyl@126.com
* date :2024/06/17
* brief :LVGL_line组件的实现函数
* note :None
*
* CopyRight (c) 2024 momolyl@126.com All Right Reseverd
*
**************************************************/
#include "lvgl/lvgl.h"
#include "lvgl/demos/lv_demos.h"
#include "lv_drivers/display/fbdev.h"
#include "lv_drivers/indev/evdev.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#include <sys/time.h> #define DISP_BUF_SIZE (8 * 1024 * 1024)
static void my_event_cb(lv_event_t * event)
{ /*创建线条风格*/
// 创建风格对象
static lv_style_t style_line;
// 对新创建的线条风格进行初始化
lv_style_init(&style_line);
// 设置线条宽度
lv_style_set_line_width(&style_line, 8);
// 设置线条颜色
lv_style_set_line_color(&style_line, lv_palette_main(LV_PALETTE_PINK));
// 设置线条端点是否为圆点
lv_style_set_line_rounded(&style_line, true); /*虚线只能用于水平或垂直线条*/
// lv_obj_set_style_line_dash_width(&style_line, 1, LV_PART_MAIN);//虚线显示的线条长度
// lv_obj_set_style_line_dash_gap(&style_line, 1, LV_PART_MAIN);//虚线间隔的线条长度 // 创建屏幕对象
lv_obj_t * scr1 = lv_obj_create(NULL); // 创建线条对象
lv_obj_t * line1 = lv_line_create(scr1); // 设置点数组
static lv_point_t line_points[] = {{5, 5}, {70, 70}, {120, 10}, {180, 60}, {240, 10}};
// 创建线条的连接点
lv_line_set_points(line1, line_points, 5); // 是否反转y轴反向(默认y轴起点为上,即自上而下y值(纵坐标)增大;若选择反转,则y轴起点为下,即自下而上y值(纵坐标)增大)
lv_line_set_y_invert(line1, true); // 设置线条风格
lv_obj_add_style(line1, &style_line, 0); // 设置主体的位置(参照点为主体左上方的顶点)
lv_obj_set_pos(line1, 100, 0); // 将创建好的线条主体添加到父对象上
lv_obj_center(scr1); // 加载屏幕对象
lv_scr_load(scr1);
} int main(void)
{
/*LittlevGL init*/
lv_init(); // 初始化LVGL图形库 /*Linux frame buffer device init*/
fbdev_init(); /*A small buffer for LittlevGL to draw the screen's content*/
static lv_color_t buf[DISP_BUF_SIZE]; /*Initialize a descriptor for the buffer*/
static lv_disp_draw_buf_t disp_buf;
lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE); /*Initialize and register a display driver*/
static lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.draw_buf = &disp_buf;
disp_drv.flush_cb = fbdev_flush;
disp_drv.hor_res = 800;
disp_drv.ver_res = 480;
lv_disp_drv_register(&disp_drv); evdev_init();
static lv_indev_drv_t indev_drv_1;
lv_indev_drv_init(&indev_drv_1); /*Basic initialization*/
indev_drv_1.type = LV_INDEV_TYPE_POINTER; /*This function will be called periodically (by the library) to get the mouse position and state*/
indev_drv_1.read_cb = evdev_read;
lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv_1); /*创建线条风格*/
// 创建风格对象
static lv_style_t style_line;
// 对新创建的线条风格进行初始化
lv_style_init(&style_line);
// 设置线条宽度
lv_style_set_line_width(&style_line, 8);
// 设置线条颜色
lv_style_set_line_color(&style_line, lv_palette_main(LV_PALETTE_LIGHT_BLUE));
// 设置线条端点是否为圆点
lv_style_set_line_rounded(&style_line, true); /*虚线只能用于水平或垂直线条*/
// lv_obj_set_style_line_dash_width(&style_line, 1, LV_PART_MAIN);//虚线显示的线条长度
// lv_obj_set_style_line_dash_gap(&style_line, 1, LV_PART_MAIN);//虚线间隔的线条长度 // 创建屏幕对象
lv_obj_t * scr1 = lv_obj_create(NULL); // 创建线条对象
lv_obj_t * line1 = lv_line_create(scr1); // 设置点数组
static lv_point_t line_points[] = {{5, 5}, {70, 70}, {120, 10}, {180, 60}, {240, 10}};
// 创建线条的连接点
lv_line_set_points(line1, line_points, 5); // 是否反转y轴反向(默认y轴起点为上,即自上而下y值(纵坐标)增大;若选择反转,则y轴起点为下,即自下而上y值(纵坐标)增大)
lv_line_set_y_invert(line1, true); // 设置线条风格
lv_obj_add_style(line1, &style_line, 0); // 设置主体的位置(参照点为主体左上方的顶点)
lv_obj_set_pos(line1, 100, 0); // 将创建好的线条主体添加到父对象上
lv_obj_center(scr1); // 加载屏幕对象
lv_scr_load(scr1); /*Handle LitlevGL tasks (tickless mode)*/
while(1) {
lv_tick_inc(5);
lv_timer_handler();
usleep(5000);
} return 0;
}

四、运行结果

LVGL line组件的更多相关文章

  1. 【可视化大屏教程】用Python开发智慧城市数据分析大屏!

    目录 一.开发背景 二.讲解代码 2.1 大标题+背景图 2.2 各区县交通事故统计图-系列柱形图 2.3 图书馆建设率-水球图 2.4 当年城市空气质量aqi指数-面积图 2.5 近7年人均生产总值 ...

  2. 使用python pip安装工具组件包:出现 requests File “<stdin>",line 1 pip install xxx ^ SyntaxError:invalid syntax

    最近想要试试python ,软件安装完成了,但是,import 组件包时,出了问题,一直不得解:安装pycharm 工具感觉麻烦,不想安装那些,只想单纯使用python . 问题复现: 1.Windo ...

  3. ExtJS 4.2 组件介绍

    目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...

  4. 高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)

    在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是”这个系统似乎就是专门操作文档的“.毕竟现在的很多办公中大都是在PC端操作文档等软件,在这些庞大而繁重的业务中,单 ...

  5. 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)

    在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...

  6. 开源Word读写组件DocX 的深入研究和问题总结

    一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...

  7. [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc

    开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...

  8. MUI开发APP,scroll组件,运用到区域滚动

    最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部.         头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...

  9. 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...

  10. [hadoop in Action] 第3章 Hadoop组件

    管理HDFS中的文件 分析MapReduce框架中的组件 读写输入输出数据   1.HDFS文件操作   [命令行方式]   Hadoop的文件命令采取的形式为: hadoop fs -cmd < ...

随机推荐

  1. Java与React轻松导出Excel/PDF数据

    前言 在B/S架构中,服务端导出是一种高效的方式.它将导出的逻辑放在服务端,前端仅需发起请求即可.通过在服务端完成导出后,前端再下载文件完成整个导出过程.服务端导出具有许多优点,如数据安全.适用于大规 ...

  2. InvalidOperationException Cannot modify ServiceCollection after application is built .Net6 异常

    背景 我用了一个叫Unchase.Swashbuckle.AspNetCore.Extensions的库来加强Swagger的文档,我一般写法是这样的: builder.Services.AddSwa ...

  3. 02-HTML知识点

    01 元素的介绍 02 元素的属性 03 元素的嵌套关系 04 HTML结构分析 4.1 文档声明[这个不叫元素] 4.2 html元素 4.3 head元素 主要用来写文档的配置信息 05 HTML ...

  4. LLM学习笔记

    1. 评估榜单 1.1. C-Eval C-Eval 是一个全面的中文基础模型评估套件.它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别. https://cevalbenchma ...

  5. ARM 命名规则和ARM 版本

    结论:我们所接触到提到的命名规则,应该分成两类. 基于ARM Architecture版本的"指令集架构"命名规则:例如armv6, armv7, armv7s, arm64 等系 ...

  6. vscode 使用 python 进行 UG 二次开发 实现代码提示功能

    vscode 使用 python 进行 UG 二次开发的 实现代码提示功能 用 VSCODE 进行 UG 二次开发的时候, 想要用代码提示的时候,可以用 pydev 插件, 但是,pydev 只有一个 ...

  7. [oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络

    编码进化 回忆上次内容 上次 回顾了 字符编码的 进化过程 IBM 在数字化过程中 作用 非常大 IBM 的 BCDIC 有 黑历史 6-bit的 BCDIC 直接进化成 8-bit的 EBCDIC ...

  8. ICPC游记

    \[\Large\color{#FCAEBD}『2024ICPC河南站 游记』 \] Day 0 晚上打了场 \(ABC\),快成屎了,最后竟然还加分了. 晚上回家洗了个澡,收拾收拾东西,凌晨2点就睡 ...

  9. C# 实现Eval(字符串表达式)的三种方法

    一.背景 假如给定一个字符串表达式"-12 * ( - 2.2 + 7.7 ) - 44 * 2",让你计算结果,熟悉JavaScript的都知道有个Eval函数可以直接进行计算, ...

  10. JavaScript 常用 Web APIs

    Web APIs Web APIs DOM 页面文档对象模型 DOM 树 获取元素 事件 监听事件 事件解绑 操作元素 样式属性操作 结点操作 结点关系 创建节点 DOM 事件流 事件对象 常用鼠标事 ...