LVGL line组件
一、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组件的更多相关文章
- 【可视化大屏教程】用Python开发智慧城市数据分析大屏!
目录 一.开发背景 二.讲解代码 2.1 大标题+背景图 2.2 各区县交通事故统计图-系列柱形图 2.3 图书馆建设率-水球图 2.4 当年城市空气质量aqi指数-面积图 2.5 近7年人均生产总值 ...
- 使用python pip安装工具组件包:出现 requests File “<stdin>",line 1 pip install xxx ^ SyntaxError:invalid syntax
最近想要试试python ,软件安装完成了,但是,import 组件包时,出了问题,一直不得解:安装pycharm 工具感觉麻烦,不想安装那些,只想单纯使用python . 问题复现: 1.Windo ...
- ExtJS 4.2 组件介绍
目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...
- 高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)
在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是”这个系统似乎就是专门操作文档的“.毕竟现在的很多办公中大都是在PC端操作文档等软件,在这些庞大而繁重的业务中,单 ...
- 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...
- 开源Word读写组件DocX 的深入研究和问题总结
一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...
- [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc
开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...
- MUI开发APP,scroll组件,运用到区域滚动
最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部. 头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...
- 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...
- [hadoop in Action] 第3章 Hadoop组件
管理HDFS中的文件 分析MapReduce框架中的组件 读写输入输出数据 1.HDFS文件操作 [命令行方式] Hadoop的文件命令采取的形式为: hadoop fs -cmd < ...
随机推荐
- 高德的API来查询行政区域查询
高德的API来查询行政区域查询 1.api接口文档地址 https://lbs.amap.com/api/webservice/guide/api/district GET https://resta ...
- CountDownLatch demo演示裁判和选手赛跑
# CountDownLatch demo演示裁判和选手赛跑 package com.example.core.mydemo; import java.util.concurrent.CountDow ...
- Pytorch复制现有环境
一,在本机上,打开anaconda Prompt直接使用 conda create -n 新环境名 --clone 旧环境名
- 使用 Spring 实现控制反转和依赖注入
使用 Spring 实现控制反转和依赖注入 概述 在本文中,我们将介绍IoC(控制反转)和DI(依赖注入)的概念,以及如何在Spring框架中实现它们. 什么是控制反转? 控制反转是软件工程中的一个原 ...
- C++中UNIX时间戳与日期互转
C++中UNIX时间戳与日期互转 使用time.h头文件 localtime 可以把时间戳转为 tm 结构体, tm结构体中可以格式化输出时间 mktime可以把tm结构体转为时间戳 tm 结构体中: ...
- 图片接口JWT鉴权实现
图片接口JWT鉴权实现 前言 之前做了个返回图片链接的接口,然后没做授权,然后今天键盘到了,也是用JWT来做接口的权限控制. 然后JTW网上已经有很多文章来说怎么用了,这里就不做多的解释了,如果不懂的 ...
- Linux 内核:sysfs 有关的API
背景 相关文章:1.sysfs与kobject基类 下面内容基本上参考(有删改):https://blog.csdn.net/qb_2008/article/details/6846412 API a ...
- P9212 题解
显然,我们维护的答案具有 可差分 性,所以转换为 \([1,r]\) 上的查询. 首先,对于 \(x,y,a_i\) 先对 \(m\) 取模不影响结果. 下面为了方便令 \(v = a_i\). 如果 ...
- ubuntu16.04 安装 eclips c/c++
前言 最近需要在ubuntu16上使用eclips编译c,尝试了apt安装和官网最新包安装甚至应用商店安装,效果都不太理想,现在把我的安装方法记录一下. 正文 !!!前提,已经自己配置好了java8的 ...
- Java常见问题-汇总
一.面试到底在问些什么东西? 首先你要知道,面试官的提问和你简历上写的内容是紧密联系的,所以你简历上写的技能一定要会. 一般面试包括下面几方面知识类型: Java基础.多线程.IO与NIO.虚拟机.设 ...