arc的相关API - lightdong/LVGL_Study GitHub Wiki
ARC_TEST/圆弧滑动条的测试/ /part : main indicator knob/
lv_obj_t *arc1 = lv_arc_create(lv_scr_act());
lv_obj_center(arc1);
lv_obj_set_size(arc1,180,180);//长宽必须是一样的,否则的话会将按最小的一个创建
//lv_obj_set_size(arc1,100,50);//长宽必须是一样的,否则的话会将按最小的一个创建
/圆弧相关属性的设置/ /可以通过下面的方面设置旋钮/
lv_obj_set_style_pad_all(arc1,5,LV_STATE_DEFAULT|LV_PART_KNOB);
lv_obj_set_style_bg_color(arc1,lv_color_hex(0xFA53B0),LV_STATE_DEFAULT|LV_PART_KNOB);
lv_obj_set_style_border_width(arc1,5,LV_STATE_DEFAULT|LV_PART_KNOB);
/修改背景弧与前景弧必须采用专用的“关键词”/
lv_obj_set_style_arc_width(arc1,30,LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_arc_color(arc1,lv_color_hex(0xE9EB3A),LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_arc_opa(arc1,LV_OPA_60,LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_arc_rounded(arc1,false,LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_arc_width(arc1,15,LV_STATE_DEFAULT|LV_PART_INDICATOR);
lv_obj_set_style_arc_color(arc1,lv_color_hex(0x45E35A),LV_STATE_DEFAULT|LV_PART_INDICATOR);
lv_obj_set_style_arc_opa(arc1,LV_OPA_60,LV_STATE_DEFAULT|LV_PART_INDICATOR);
lv_obj_set_style_arc_rounded(arc1,false,LV_STATE_DEFAULT|LV_PART_INDICATOR);
/把knob的所有属性都去掉可以看到,两端都变成了平的/
//lv_obj_remove_style(arc1,NULL,LV_PART_KNOB);
/设置圆弧的范围与样式/
lv_arc_set_range(arc1,0,100);
lv_arc_set_value(arc1,30);//set_value要在set_range后
printf("val : %d",lv_arc_get_value(arc1));
/修改背景色与前景色的圆弧范围/
lv_arc_set_bg_angles(arc1,180,360);//这是由另外两个API构成,感觉使用的时候这一个就够用了
//lv_arc_set_angles(arc1,225,360);//前景与背景不一样时会被吞掉
/相以于之前的顺时针偏移/
//lv_arc_set_rotation(arc1,45);
/angle 与 value只能修改一个/ //normal,revarse,symmetrical //默认下就是normal,顺时针旋转
//lv_arc_set_mode(arc1,LV_ARC_MODE_REVERSE);//坏了,有BUG
//lv_arc_set_mode(arc1,LV_ARC_MODE_SYMMETRICAL);
/调节灵敏度/
lv_arc_set_change_rate(arc1,100);
/设置一个label来显示,在UI中显示value/
lv_obj_t *label1 = lv_label_create(lv_scr_act());
/*将label始终与arc中的knob对齐*/
lv_arc_align_obj_to_angle(arc1,label1,30);
lv_label_set_text_fmt(label1,"%d%%",lv_arc_get_value(arc1));
/配置回调函数/
lv_obj_add_event_cb(arc1,arc_cb,LV_EVENT_VALUE_CHANGED,label1);
/圆弧相关的回调函数/
static void arc_cb(lv_event_t *e){
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *target = lv_event_get_target(e);
if(target == NULL)
return;
lv_obj_t *usr_value = (lv_obj_t *)lv_event_get_user_data(e);
if(usr_value == NULL)
return;
if(LV_EVENT_VALUE_CHANGED != code)
return;
printf("val : %d\n",lv_arc_get_value(target));
lv_label_set_text_fmt(usr_value,"%d%%",lv_arc_get_value(target));
lv_arc_align_obj_to_angle(target,usr_value,30);
}