一、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. 两个Excel表格核对 excel表格中# DIV/0 核对两个表格的差异,合并运算VS高级筛选

    两个Excel表格核对   excel表格中# DIV/0 核对两个表格的差异,合并运算VS高级筛选 1.两列顺序一样的数据核对 方法1:加一个辅助列,=B2=C2 结果为FALSE的就是不相同的 方 ...

  2. rest接口list参数接收

    list<String> post传参 ["1112","2222","3332"]list<Object> pos ...

  3. 阿里云安全扫描漏洞修复fastjson,jackson,xstream,redis, 微信支付xml转对象 ForbiddenClassException

    阿里云安全扫描漏洞修复fastjson,jackson,xstream,redis 1.fastjson漏洞fastjson爆发新的反序列化远程代码执行漏洞,黑客利用漏洞,可绕过autoType限制, ...

  4. 汽车生产车间PMC组态画面应该怎么设计

    通常我们所说的汽车制造四大工艺指的是:冲压.焊装.涂装.总装.一般来说,在汽车制造工厂,这四大工艺分别对应四大车间.本文结合一些实际应用案例,向大家展示一下 TopStack 在汽车制造业各工艺车间中 ...

  5. 工具类——EventManager

    EventManager using UnityEngine; using System.Collections; using System.Collections.Generic; using Un ...

  6. 06-Python类与对象

    什么是类 百度百科: 类是对象的抽象,对象是对客观事物的抽象. 用通俗的话来说: 类是类别的意思,是数据类型. 对象是类别下的具体事物. 也就是说: 类是数据类型,对象是变量. 比如: 自定义一种数据 ...

  7. Linux 内核:I2C子系统分析(0)整体框架介绍

    --- title: Linux I2C子系统分析:1-整体框架介绍 EntryName: linux-subsystem-i2c-0-about date: 2020-10-13 04:19:26 ...

  8. 汇总:"undefined reference to" 问题解决方法

    背景 在Linux下编程容易出现的现象,就是在链接多文件的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于undefin ...

  9. 嵌入式必看!全志T113-i+玄铁HiFi4核心板硬件说明资料分享

    目 录 1 硬件资源 2 引脚说明(篇幅问题,暂不提供详细内容) 3 电气特性 4 机械尺寸 5 底板设计注意事项 硬件资源 SOM-TLT113核心板板载CPU.ROM.RAM.晶振.电源.LED等 ...

  10. 6.Class 与 Style 绑定

    操作元素的 class 列表和内联样式是数据绑定的一个常见需求. 因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可. 不过,字符串拼接麻烦且易错.因此,在 ...