lvgl 的样式设置参考了css 的盒子模型的概念,了解盒子模型的相关知识点,有助于利用lvgl 实现我们需要的UI效果。

圆弧对象不仅仅是“红绿色圆”所组成的部分,而是图中以白色为背景的所有区域。

V8.3.x
默认模式下(NORMAL),圆弧的0度在3点钟的方向,随着度数的增长,圆弧向着顺时针的方向生长。

设置开始和结束角度
void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end);
设置结束角度
void lv_arc_set_end_angle(lv_obj_t * arc, uint16_t end);
这里的背景指的是圆弧主体。
void lv_arc_set_bg_angles(lv_obj_t * arc, uint16_t start, uint16_t end);
void lv_arc_set_bg_start_angle(lv_obj_t * arc, uint16_t start);
void lv_arc_set_bg_end_angle(lv_obj_t * arc, uint16_t end);
lvgl arc 没有直接提供api 去设置一个圆弧的半径。lv_obj_set_style_radius看起来很像,实际上是用来设置圆弧对象背景的4个角的弧度的。
由于arc 对象继承于obj 类对象,我们可以通过调用 lv_obj_set_size 函数来设置圆弧对象的宽和高,从而实现对圆弧半径的设置。
void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h);
lv_obj_set_style_radius( ui_Arc1, 20, LV_PART_MAIN | LV_STATE_DEFAULT );

旧版本(V7.11)的lvgl 设置圆弧宽度的api 比较隐蔽,是通过设置样式的line_width 来实现设置圆弧宽度。
新版本(V8.3.x ) 的lvgl设置圆弧宽度如下:
void lv_obj_set_style_arc_width(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector)
lv_obj_set_style_arc_width( ui_Arc1, 10, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_arc_width( ui_Arc1, 10, LV_PART_INDICATOR | LV_STATE_DEFAULT );
void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y);
设置相对父类中央对齐。其他对齐方式,可以跳转到LV_ALIGN_CENTER 定义处,选择其他对齐方式。
lv_obj_set_align( ui_Arc1, LV_ALIGN_CENTER );

如上图所示,圆弧主要有三种颜色需要设置。
lv_obj_set_style_bg_color( ui_Arc1, lv_color_white(), LV_PART_MAIN | LV_STATE_DEFAULT );
//绿色
lv_obj_set_style_arc_color( ui_Arc1, lv_color_hex( 0x04FF0F ), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_arc_color( ui_Arc1, lv_color_hex( 0xFF404B ), LV_PART_INDICATOR | LV_STATE_DEFAULT );
定义元素边框与元素内容之间的空间,即上下左右的内边距。

pad_toppad_bottompad_leftpad_rightlv_obj_set_style_pad_left( ui_Arc1, 20, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_pad_right( ui_Arc1, 20, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_pad_top( ui_Arc1, 20, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_pad_bottom( ui_Arc1, 20, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_pad_all( ui_Arc1, 0, LV_PART_MAIN | LV_STATE_DEFAULT );
