lv_gauge
lv_gauge仪表盘是lv_linemeter控件外加标签、指针、中心原点组成,标签个数、指针个数可设置,lv_linemeter中的非活跃刻度线变成了关键数值点。
样式
/*Styles*/
enum {
LV_GAUGE_PART_MAIN = LV_LINEMETER_PART_MAIN,
LV_GAUGE_PART_MAJOR = _LV_LINEMETER_PART_VIRTUAL_LAST,
LV_GAUGE_PART_NEEDLE,
_LV_GAUGE_PART_VIRTUAL_LAST = _LV_LINEMETER_PART_VIRTUAL_LAST,
_LV_GAUGE_PART_REAL_LAST = _LV_LINEMETER_PART_REAL_LAST,
};
typedef uint8_t lv_gauge_style_t;
例子
lv_obj_t * gauge1;
static void task_cb(lv_task_t task)
{
if (lv_gauge_get_value(gauge1,0) >= lv_gauge_get_max_value(gauge1))
lv_gauge_set_value(gauge1, 0, 0);
else
lv_gauge_set_value(gauge1, 0, lv_gauge_get_value(gauge1, 0)+1);
if (lv_gauge_get_value(gauge1, 1) >= lv_gauge_get_max_value(gauge1))
lv_gauge_set_value(gauge1, 1, 0);
else
lv_gauge_set_value(gauge1, 1, lv_gauge_get_value(gauge1, 1) + 2);
if (lv_gauge_get_value(gauge1, 2) >= lv_gauge_get_max_value(gauge1))
lv_gauge_set_value(gauge1, 2, 0);
else
lv_gauge_set_value(gauge1, 2, lv_gauge_get_value(gauge1, 2) + 3);
}
void lv_ex_gauge_2(void)
{
/*Describe the color for the needles*/
static lv_color_t needle_colors[3];
needle_colors[0] = LV_COLOR_BLUE;
needle_colors[1] = LV_COLOR_ORANGE;
needle_colors[2] = LV_COLOR_PURPLE;
LV_IMG_DECLARE(img_hand);
/*Create a gauge*/
gauge1 = lv_gauge_create(lv_scr_act(), NULL);
lv_gauge_set_range(gauge1, 0, 80);//设置仪表盘数值范围,默认0-100
lv_gauge_set_critical_value(gauge1, 60);//设置关键数值点,默认80
lv_gauge_set_needle_count(gauge1, 3, needle_colors);//设置指针数量和颜色
//设置仪表盘角度、刻度数、标签数
lv_gauge_set_scale(gauge1, 300, 41, 9);
lv_obj_set_size(gauge1, 220, 220);
lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0);
//用img_hand这张图片当做指针,指针要指向右边且水平
lv_gauge_set_needle_img(gauge1, &img_hand, 4, 4);
/*允许对img_hand图片指针重绘色*/
lv_obj_set_style_local_image_recolor_opa(gauge1, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER);
/*设置指针数值*/
lv_gauge_set_value(gauge1, 0, 10);
lv_gauge_set_value(gauge1, 1, 20);
lv_gauge_set_value(gauge1, 2, 30);
lv_task_create(task_cb, 300, LV_TASK_PRIO_MID, NULL);
}
img_hand图片