LVGL line组件

news/2024/10/2 10:25:50

目录
  • Line(线条)的概念
  • 线条组件的使用
    • 创建线条对象
    • 设置点数组
    • 确定y轴的方向(可选)
    • 设置线条风格(可选)
      • 创建风格
      • 设置风格
  • 将创建好的线段组件添加到父对象上
  • 示例代码:
  • 运行结果

Line(线条)的概念

image

线条组件的使用

创建线条对象

image
image

设置点数组

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

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

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

示例代码:
image

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

确定y轴的方向(可选)

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

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

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

设置线条风格(可选)

创建风格

image

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

设置风格

image

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

image

示例代码:

/***************************************************   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;
}

运行结果

image

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

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

相关文章

课堂测试企业族谱分析1-4问

第一问: 查询: 第二问: 查询公司的股东 可视化:可隐藏和展开: 第三问: 投资可视化,查询公司名称: 也可以隐藏和展开: 第四问: 一个公司的图谱用左右树图来可视化: 也可以隐藏和展开: 剩下的第五问第六问明天发

第一周:时间复杂度该怎么看?

文章小结: 1.算法时间复杂度是什么官方定义:算法在编写成可执行程序后,运行时所需要的资源,资源包括时间和内存。解读:可执行程序运行所需要时间的一个量化指标。例如O(1),常量级。 2. 常见的时间复杂度O(1) :常量级 O(n):线性 O(logn):对数 O(nlogn) O(n^2):平方 O(…

提升效率必备VSCode运行快捷键全攻略

哈喽,大家好,我是木头左!快速编译与执行 在开发过程中,频繁地编译和执行代码是必不可少的。而在VSCode中,通过简单的键盘操作即可完成这些操作,无需鼠标点击或多余的步骤。 Ctrl + Shift + B or Cmd + Shift + B 这个快捷键用于编译当前打开的文件。按下它,VSCode会使用…

一行Python代码可以做什么,超出你想象

哈喽,大家好,我是木头左!揭秘编程语言的灵活性 在编程的世界里,简洁就是力量。Python以其优雅和简洁而著称,让开发者能够用更少的代码做更多的事。但这并不意味着功能上的妥协——Python的强大之处在于它允许在一行代码中执行多个语句,这不仅能提高的编码效率,还能使代码…

嗨翻-Python-第三版-早期发布--全-

嗨翻 Python 第三版(早期发布)(全)原文:annas-archive.org/md5/417e7d9e18255015d2c5d146fdf36e20 译者:飞龙 协议:CC BY-NC-SA 4.0序言 安装最新的 Python 3 你在这里所做的取决于你正在运行的平台,假定是其中之一的 Windows、macOS 或 Linux。 好消息是所有三个平台都…

【杂记】配置文件

properties配置文件 application.properties是springboot项目默认的配置文件,所以springboot程序在启动时会默认读取application.properties配置文件,而我们可以使用一个现成的注解:@Value,获取配置文件中的数据。@Value 注解通常用于外部配置的属性注入,具体用法为: @Va…

wnmp安装配置记录(重装系统重置后)

一、windows10 二、nginx安装与配置 nginx news开源网站下载稳定版本1.nginx下载完成解压,即安装成功 2.进入安装目录,双击nginx.exe,启动nginx服务器 3.浏览器中打开http://localhost,出现nginx欢迎页面即为成功 三、安装配置php 1、进入PHP官网下载最新稳定版本,windows…