lv_arc
lv_arc,3点方向为0度,6点方向为90度,总共范围0~360度,相关API在lv_arc.h
圆弧类型
enum {
LV_ARC_TYPE_NORMAL,
LV_ARC_TYPE_SYMMETRIC,
LV_ARC_TYPE_REVERSE
};
typedef uint8_t lv_arc_type_t;
样式
有3部分样式
/*Parts of the arc*/
enum {
LV_ARC_PART_BG = LV_OBJ_PART_MAIN,
LV_ARC_PART_INDIC,
LV_ARC_PART_KNOB,
_LV_ARC_PART_VIRTUAL_LAST,
_LV_ARC_PART_REAL_LAST = _LV_OBJ_PART_REAL_LAST,
};
typedef uint8_t lv_arc_part_t;
例子
static void arc_event_handler(lv_obj_t * obj, lv_event_t event)
{
int angle = 0;
if (event == LV_EVENT_CLICKED) {
printf("arc Clicked\n");
}
else if (event == LV_EVENT_VALUE_CHANGED) { // 角度改变事件,手触摸/拖动进度条
angle = lv_arc_get_angle_end(obj); // 获取事件对象改变的角度
static char buf[8];
lv_snprintf(buf, sizeof(buf), "Arc %d", angle); // 将值变为字符串
lv_obj_t * label = lv_obj_get_child(obj, NULL); // 获取事件对象的标签子对象
lv_label_set_text(label, buf); // 设置标签文本
lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, 0); // 标签文件有改变要重新设置对齐
printf("Value_Changed:%d\n", angle);
}
}
void arc_test()
{
static lv_style_t angles_style;
lv_style_init(&angles_style);
lv_style_set_line_color(&angles_style, LV_STATE_DEFAULT, LV_COLOR_RED);
// 创建一个Arc
lv_obj_t * arc = lv_arc_create(lv_scr_act(), NULL);
/*设置前景起始角度*/
//lv_arc_set_start_angle(arc, 135);
//lv_arc_set_end_angle(arc, 45);
lv_arc_set_angles(arc, 135, 45);
/*设置背景起始角度*/
//lv_arc_set_bg_start_angle(arc, 135);
//lv_arc_set_bg_end_angle(arc, 45);
lv_arc_set_bg_angles(arc, 135, 45);
/*设置大小*/
lv_obj_set_size(arc, 150, 150);
lv_obj_align(arc, NULL, LV_ALIGN_CENTER, 0, 0);
/*设置控件可触摸调整结束角度*/
lv_arc_set_adjustable(arc, true);
lv_obj_t * label = lv_label_create(arc, NULL); // 在Arc控件上创建一个标签
lv_obj_align(label, arc, LV_ALIGN_CENTER, 0, 0);
lv_label_set_text(label, "Arc");
lv_obj_add_style(arc, LV_ARC_PART_INDIC, &angles_style);
/*arc注册事件回调*/
lv_obj_set_event_cb(arc, arc_event_handler);
}