| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-12-8 | yang | 初次建立 | ===== 实验十七:lv_lmeter刻度指示器 ===== ==== 一、刻度指示器 ==== 刻度指示器是一种类似于仪表盘的弧形刻度,由一些径向放射状的刻度线构成,主要作用是进度指示。刻度指示器只有一个主要部分,称为 **LV_LINEMETER_PART_MAIN** ,它使用所有典型的背景属性绘制矩形或圆形背景,并使用** line** 和 **scale** 属性绘制比例刻度线。 在所有的刻度线中,可以分为两种,一种是活跃刻度线,它利用样式中的 **line_color** 和 **scale_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)** 来设置为顺时针或逆时针方向。 {{ :icore4t:icore4t_rtt_lvgl_17_1.gif?direct |}} 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); } } }