银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-12-10 | yang | 初次建立 |
仪表盘是一种带有刻度、标签和一根或多根指针的指示器。它的主要部分称为 LV_GAUGE_PART_MAIN 。它使用典型的背景样式属性绘制背景,并使用线和比例样式属性绘制“较小”刻度线。它还使用text属性设置比例标签的样式。pad_inner 用于设置刻度线和比例标签之间的间距。
LV_GAUGE_PART_MAJOR 是一个虚拟小部件,它使用 line 和 scale 样式属性描述了主要的刻度线并添加了标签。
LV_GAUGE_PART_NEEDLE 也是虚拟小部件,它通过 line 样式属性来描述指针。用 pad_inner 使指针长度小于刻度线的外半径。
仪表盘可以显示一根指针或者多根指针。使用函数 lv_gauge_set_needle_count(gauge, needle_num, color_array) 可以设置指针数和每根指针颜色的数组。数组必须是静态或全局变量,因为LVGL仅存储其指针。
函数 lv_gauge_set_value(gauge, needle_id, value) 可以设置不同指针的值。
void lv_gui_run(void){ lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ static lv_color_t needle_colors[3]; /* 创建指针颜色数组 */ needle_colors[0] = LV_COLOR_BLUE; /* 指针0蓝色 */ needle_colors[1] = LV_COLOR_ORANGE; /* 指针1橙色 */ needle_colors[2] = LV_COLOR_PURPLE; /* 指针2紫色 */ lv_obj_t * gauge1 = lv_gauge_create(lv_scr_act(), NULL);/* 创建仪表盘 */ lv_gauge_set_needle_count(gauge1, 3, needle_colors); /* 设置指针数,传入颜色列表 */ lv_obj_set_size(gauge1, 200, 200); /* 设置尺寸 */ lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0); /* 设置位置 */ lv_gauge_set_value(gauge1, 0, 10); /* 指针0值 */ lv_gauge_set_value(gauge1, 1, 20); /* 指针1值 */ lv_gauge_set_value(gauge1, 2, 30); /* 指针2值 */ }
设置仪表盘刻度的偏转角度,可以用 lv_gauge_set_angle_offset(gauge, angle) 。仪表盘的刻度值范围可以通过 lv_gauge_set_range(gauge, min, max) 指定。默认范围是 [0, 100] 。
用户可以使用 lv_gauge_set_scale(gauge, angle, line_num, label_cnt) 调整刻度角度范围以及刻度线和标签的数量。默认设置范围为 220 度,21 条刻度线和 6 个比例标签。 line_num 的计算公式如下,其中 subdivision 为想要设置的标签之间的“细分”行。
line_num = (subdivision + 1) * (label_cnt - 1) + 1
例如,我想在仪表盘上显示9个比例标签,将刻度值分为8份,刻度值范围设为 [0, 200],则每两个标签之间范围是25,将25细分为5,需要细分刻度 subdivision 为4,则刻度行 line_num 总共需要 ( 4 + 1)*( 9 - 1) + 1 = 41个。
void lv_gui_run(void){ lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ static lv_color_t needle_colors[3]; /* 创建指针颜色数组 */ needle_colors[0] = LV_COLOR_BLUE; /* 指针0蓝色 */ needle_colors[1] = LV_COLOR_ORANGE; /* 指针1橙色 */ needle_colors[2] = LV_COLOR_PURPLE; /* 指针2紫色 */ lv_obj_t * gauge1 = lv_gauge_create(lv_scr_act(), NULL);/* 创建仪表盘 */ lv_gauge_set_needle_count(gauge1, 3, needle_colors); /* 设置指针数,传入颜色列表 */ lv_gauge_set_range(gauge1, 0, 200); /* 设置刻度值范围 */ lv_gauge_set_scale(gauge1, 270, 41, 9); /* 设置刻度细分 */ lv_obj_set_size(gauge1, 200, 200); /* 设置尺寸 */ lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0); /* 设置位置 */ lv_gauge_set_value(gauge1, 0, 10); /* 指针0值 */ lv_gauge_set_value(gauge1, 1, 20); /* 指针1值 */ lv_gauge_set_value(gauge1, 2, 30); /* 指针2值 */ }
指针形状默认为纯色线,不过图像也可以用作指针。指针图像应该是水平的,并指向右边('——> ')。要设置图像,请使用 lv_gauge_set_needle_img(gauge1, &img, pivot_x, pivot_y) 。&img指针指向一个 'lv_img_dsc_t' 变量或一个图像的路径(不是 'lv_img' 对象)。pivot_x为图像旋转中心的X坐标, pivot_y为图像旋转中心的Y坐标(左上角为坐标原点)。
图像将以 image_recolor_opa(样式属性)强度重新着色为指针的颜色。关于图像设置,请参考Images图像(Overview)章节。
要设置临界值,请使用 lv_gauge_set_critical_value(gauge, value) 。此值之后,比例尺颜色将更改为 scale_end_color。默认临界值为80。
注意,临界值起始位置只能在刻度线上并且大于临界值才开始绘制,因此要设置临界线为150的话,最好传入参数149,如下例所示。
void lv_gui_run(void){ lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ static lv_color_t needle_colors[3]; /* 创建指针颜色数组 */ needle_colors[0] = LV_COLOR_BLUE; /* 指针0蓝色 */ needle_colors[1] = LV_COLOR_ORANGE; /* 指针1橙色 */ needle_colors[2] = LV_COLOR_PURPLE; /* 指针2紫色 */ lv_obj_t * gauge1 = lv_gauge_create(lv_scr_act(), NULL);/* 创建仪表盘 */ lv_gauge_set_needle_count(gauge1, 3, needle_colors); /* 设置指针数,传入颜色列表 */ lv_gauge_set_range(gauge1, 0, 200); /* 设置刻度值范围 */ lv_gauge_set_scale(gauge1, 270, 41, 9); /* 设置刻度细分 */ lv_gauge_set_critical_value(gauge1, 149); /* 设置临界值 */ lv_obj_set_size(gauge1, 200, 200); /* 设置尺寸 */ lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0); /* 设置位置 */ lv_gauge_set_value(gauge1, 0, 10); /* 指针0值 */ lv_gauge_set_value(gauge1, 1, 20); /* 指针1值 */ lv_gauge_set_value(gauge1, 2, 30); /* 指针2值 */ }