用户工具

站点工具


icore4tlvgl_17
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-12-8 yang 初次建立

实验十七:lv_lmeter刻度指示器

一、刻度指示器

刻度指示器是一种类似于仪表盘的弧形刻度,由一些径向放射状的刻度线构成,主要作用是进度指示。刻度指示器只有一个主要部分,称为 LV_LINEMETER_PART_MAIN ,它使用所有典型的背景属性绘制矩形或圆形背景,并使用 linescale 属性绘制比例刻度线。

在所有的刻度线中,可以分为两种,一种是活跃刻度线,它利用样式中的 line_colorscale_grad_color 属性让活跃刻度线显示出弧形渐变色,活跃刻度线的作用就是展示当前的进度值,配合渐变色,可以达到更为直观的提示作用。另外一种就是非活跃刻度线,它的颜色由 scale_end_color 指定,一般为灰色,用来作为背景刻度线,表示还剩下多少进度未被加载。刻度指示器仅支持通用事件。

static lv_style_t style;                                   /* 创建样式 */
lv_style_init(&style);                                     /* 初始化样式 */
 
/* 初始渐变色 */
lv_style_set_line_color(&style, LV_STATE_DEFAULT, LV_COLOR_RED);
 
/* 结尾渐变色 */	
lv_style_set_scale_grad_color(&style, LV_STATE_DEFAULT, LV_COLOR_BLUE);
 
/* 刻度底色 */
lv_style_set_scale_end_color(&style, LV_STATE_DEFAULT, LV_COLOR_YELLOW);

二、设定值

用户可以使用 lv_linemeter_set_value(linemeter, new_value) 来修改刻度指示器比例值,刻度线会重新着色。

三、角度与范围

使用 lv_linemeter_set_range(linemeter, min, max) 可以设置刻度值的范围,默认范围值为 [1, 100]。

使用 lv_linemeter_set_scale(linemeter, angle, line_num) 可以设置刻度的角度和刻度线的数量,默认角度为 240度,默认刻度数为 31个。

四、角度偏移

默认情况下,刻度角相对于 y 轴对称地分布。使用 lv_linemeter_set_angle_offset(lmeter, angle) 可以使刻度指示器偏转一个角度。例如,它可以用于将四分之一角度范围的指示器放在角落或一半角度范围的指示器放在右侧或者左侧。

五、方向

默认情况下,刻度指示器的刻度是沿顺时针方向激活的,不过用户可以使用函数 lv_linemeter_set_mirror(linemeter, true/false) 来设置为顺时针或逆时针方向。

void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                       /* 初始化lvgl2rtt */
 
	static lv_style_t style;                                    /* 创建样式 */
	lv_style_init(&style);                                      /* 初始化样式 */
	lv_style_set_line_color(&style, LV_STATE_DEFAULT, LV_COLOR_RED);/* 初始渐变色 */
	lv_style_set_scale_grad_color(&style, LV_STATE_DEFAULT, LV_COLOR_BLUE);/* 结尾渐变色 */
	lv_style_set_scale_end_color(&style, LV_STATE_DEFAULT, LV_COLOR_YELLOW);/* 刻度底色 */
 
	lv_obj_t * lmeter = lv_linemeter_create(lv_scr_act(), NULL);/* 刻度指示器 */
	lv_obj_add_style(lmeter, LV_LINE_PART_MAIN, &style);        /* 添加样式 */
	lv_linemeter_set_range(lmeter, 0, 100);                     /* 设置刻度范围 */
	lv_linemeter_set_value(lmeter, 0);                          /* 设置刻度比例值 */
	lv_linemeter_set_scale(lmeter, 240, 31);                    /* 设置角度范围 */
	lv_obj_set_size(lmeter, 200, 200);                          /* 设置尺寸 */
	lv_obj_align(lmeter, NULL, LV_ALIGN_CENTER, 0, 0);          /* 设置对齐方式 */
 
	lv_obj_t * label1 = lv_label_create(lmeter, NULL);          /* 创建标签 */
	lv_label_set_text(label1, "0");                             /* 设置初始内容 */
	lv_obj_align(label1, lmeter, LV_ALIGN_CENTER, 0, 0);        /* 设置对齐方式 */
 
	while(true){                                                /* 动态改变刻度比例值 */
		for(int i=0;i<100;i++){
			lv_linemeter_set_value(lmeter, i);
			lv_label_set_text_fmt(label1, "%d",i);
			rt_thread_mdelay(50);
		}
		for(int i=100;i>0;i--){
			lv_linemeter_set_value(lmeter, i);
			lv_label_set_text_fmt(label1, "%d",i);
			rt_thread_mdelay(50);
		}
	}
}
icore4tlvgl_17.txt · 最后更改: 2022/04/01 11:14 由 sean