弧(lv_arc)¶
概述¶
弧由背景弧和前景弧组成。两者都可以具有起始角度和终止角度以及厚度。
零件和样式¶
弧的主要部分称为 LV_ARC_PART_MAIN
。它使用典型的背景样式属性绘制背景,并使用线型属性绘制圆弧。圆弧的大小和位置将遵守填充样式的属性。
LV_ARC_PART_INDIC
是虚拟零件,它使用线型属性绘制另一个弧。它的填充值是相对于背景弧线解释的。指示器圆弧的半径将根据最大填充值进行修改。
LV_ARC_PART_KNOB
是虚拟零件,它绘制在弧形指示器的末端。它使用所有背景属性和填充值。使用零填充时,旋钮的大小与指示器的宽度相同。较大的填充使其较大,较小的填充使其较小。
用法¶
角度¶
要设置背景角度,请使用 lv_arc_set_bg_angles(arc, start_angle, end_angle)
函数或 lv_arc_set_bg_start/end_angle(arc, start_angle)
。零度位于对象的右中间(3点钟),并且度沿顺时针方向增加。角度应在[0; 360]范围内。
同样, lv_arc_set_angles(arc, start_angle, end_angle)
函数或 lv_arc_set_start/end_angle(arc, start_angle)
函数设置指示器弧的角度。
回转¶
可以使用 lv_arc_set_rotation(arc, deg)
添加到0度位置的偏移量。
范围和值¶
除了手动设置角度外,弧还可以具有范围和值。要设置范围,请使用 lv_arc_set_range(arc, min, max)
,并设置一个值,请使用 lv_arc_set_value(arc, value)
。使用范围和值,指示器的角度将在背景角度之间映射。
注意,设置角度和值是独立的。应该使用值和角度设置。两者混合可能会导致意外的效果。
类型¶
弧可以具有不同的“类型”。它们用 lv_arc_set_type
设置。存在以下类型:
LV_ARC_TYPE_NORMAL
指示器弧顺时针绘制(最小电流)LV_ARC_TYPE_REVERSE
指示器弧沿逆时针方向绘制(最大电流)LV_ARC_TYPE_SYMMETRIC
从中间点绘制到当前值的指示弧。
范例¶
简单弧¶
上述效果的示例代码:
1 #include "../../../lv_examples.h"
2
3 #if LV_USE_ARC
4
5 void lv_ex_arc_1(void)
6 {
7 /*Create an Arc*/
8 lv_obj_t * arc = lv_arc_create(lv_scr_act(), NULL);
9 lv_arc_set_end_angle(arc, 200);
10 lv_obj_set_size(arc, 150, 150);
11 lv_obj_align(arc, NULL, LV_ALIGN_CENTER, 0, 0);
12 }
13
14 #endif
圆弧加载进度条¶
上述效果的示例代码:
1 #include "../../../lv_examples.h"
2 #if LV_USE_ARC
3
4 /**
5 * An `lv_task` to call periodically to set the angles of the arc
6 * @param t
7 */
8 static void arc_loader(lv_task_t * t)
9 {
10 static int16_t a = 270;
11
12 a+=5;
13
14 lv_arc_set_end_angle(t->user_data, a);
15
16 if(a >= 270 + 360) {
17 lv_task_del(t);
18 return;
19 }
20 }
21
22 /**
23 * Create an arc which acts as a loader.
24 */
25 void lv_ex_arc_2(void)
26 {
27 /*Create an Arc*/
28 lv_obj_t * arc = lv_arc_create(lv_scr_act(), NULL);
29 lv_arc_set_bg_angles(arc, 0, 360);
30 lv_arc_set_angles(arc, 270, 270);
31 lv_obj_align(arc, NULL, LV_ALIGN_CENTER, 0, 0);
32
33 /* Create an `lv_task` to update the arc.
34 * Store the `arc` in the user data*/
35 lv_task_create(arc_loader, 20, LV_TASK_PRIO_LOWEST, arc);
36 }
37
38 #endif
相关API¶
Typedefs¶
1 typedef uint8_t lv_arc_type_t;
2 typedef uint8_t lv_arc_part_t;
3
4 /* 弧的数据 */
5 typedef struct {
6 /* 此类型的新数据 */
7 uint16_t rotation_angle; /* 旋转角度 */
8 uint16_t arc_angle_start; /* 开始角度 */
9 uint16_t arc_angle_end; /* 结束角度 */
10 uint16_t bg_angle_start; /* 背景开始角度 */
11 uint16_t bg_angle_end; /* 背景结束角度 */
12 lv_style_list_t style_arc; /* 样式 */
13 lv_style_list_t style_knob; /* 旋钮样式 */
14
15 int16_t cur_value; /* 弧当前值 */
16 int16_t min_value; /* 弧的最小值 */
17 int16_t max_value; /* 弧的最大值 */
18 uint16_t dragging : 1;
19 uint16_t type : 2;
20 uint16_t adjustable : 1;
21 uint16_t min_close : 1; /* 1:最后一个压角更接近最小端 */
22 uint16_t chg_rate; /* 阻力角圆弧变化率(度/秒) */
23 uint32_t last_tick; /* 弧的最后拖拽事件时间戳 */
24 int16_t last_angle; /* 弧的最后拖曳角 */
25 } lv_arc_ext_t;
enums¶
1 enum {
2 LV_ARC_TYPE_NORMAL, /* 正常类型 */
3 LV_ARC_TYPE_SYMMETRIC, /* 对称类型 */
4 LV_ARC_TYPE_REVERSE /* 逆向类型 */
5 };
6
7
8 /* 弧的部分 */
9 enum {
10 LV_ARC_PART_BG = LV_OBJ_PART_MAIN,
11 LV_ARC_PART_INDIC,
12 LV_ARC_PART_KNOB,
13 _LV_ARC_PART_VIRTUAL_LAST,
14 _LV_ARC_PART_REAL_LAST = _LV_OBJ_PART_REAL_LAST,
15 };
函数¶
1 lv_obj_t * lv_arc_create(lv_obj_t * par,constlv_obj_t *copy)
2 功能:创建弧对象
3 返回:指向创建的弧的指针
4 形参:
5 par:指向对象的指针,它将是新弧的父对象
6 copy:指向弧对象的指针,如果不为NULL,则将从其复制新对象
7
8 void lv_arc_set_start_angle(lv_obj_t * arc,uint16_t start)
9 功能:设置圆弧的起始角度。0度:右,90底等。
10 形参:
11 arc:指向弧对象的指针
12 start:起始角度
13
14 void lv_arc_set_end_angle(lv_obj_t * arc,uint16_t end )
15 功能:设置圆弧的起始角度。0度:右,90底等。
16 形参:
17 arc:指向弧对象的指针
18 end:结束角度
19
20 void lv_arc_set_angles(lv_obj_t * arc,uint16_t start,uint16_t end)
21 功能:设置开始和结束角度
22 形参:
23 arc:指向弧对象的指针
24 start:起始角度
25 end:结束角度
26
27 void lv_arc_set_bg_start_angle(lv_obj_t * arc,uint16_t start)
28 功能:设置弧形背景的起始角度。0度:右,90底等。
29 形参:
30 arc:指向弧对象的指针
31 start:起始角度
32
33 void lv_arc_set_bg_end_angle(lv_obj_t * arc,uint16_t end)
34 功能:设置弧形背景的起始角度。0度:右,90底等。
35 形参:
36 arc:指向弧对象的指针
37 end:结束角度
38
39 void lv_arc_set_bg_angles(lv_obj_t * arc,uint16_t start,uint16_t end)
40 功能:设置弧形背景的开始和结束角度
41 形参:
42 arc:指向弧对象的指针
43 start:起始角度
44 end:结束角度
45
46 void lv_arc_set_rotation(lv_obj_t * arc,uint16_t rotation_angle)
47 功能:设置整个圆弧的旋转
48 形参:
49 arc:指向弧对象的指针
50 rotation_angle:旋转角度
51
52 void lv_arc_set_type(lv_obj_t * arc,lv_arc_type_t type)
53 功能:设置圆弧的类型。
54 形参:
55 arc:指向弧对象的指针
56 type:圆弧型
57
58 void lv_arc_set_value(lv_obj_t * arc,int16_t值)
59 功能:在圆弧上设置一个新值
60 形参:
61 arc:指向弧对象的指针
62 value:新价值
63
64 void lv_arc_set_range(lv_obj_t * arc,int16_t min,int16_t max)
65 功能:设置圆弧的最小值和最大值
66 形参:
67 arc:指向弧对象的指针
68 min:最小值
69 max:最大值
70
71 void lv_arc_set_chg_rate(lv_obj_t * arc,uint16_t threshold)
72 功能:设置圆弧旋钮增量位置的阈值。
73 形参
74 arc:指向弧对象的指针
75 threshold:增量阈值
76
77 void lv_arc_set_adjustable(lv_obj_t * arc,bool adjustable)
78 功能:设置圆弧是否可调。
79 形参:
80 arc:指向弧对象的指针
81 adjustable:圆弧是否具有可以拖动的旋钮
82
83 uint16_t lv_arc_get_angle_start(lv_obj_t * arc)
84 功能:获取圆弧的起始角度。
85 返回:起始角度[0..360]
86 形参:
87 arc:指向弧对象的指针
88
89 uint16_t lv_arc_get_angle_end(lv_obj_t * arc)
90 功能:获取圆弧的末端角度。
91 返回:端角[0..360]
92 形参:
93 arc:指向弧对象的指针
94
95 uint16_t lv_arc_get_bg_angle_start(lv_obj_t * arc)
96 功能:获取弧形背景的起始角度。
97 返回:起始角度[0..360]
98 形参:
99 arc:指向弧对象的指针
100
101 uint16_t lv_arc_get_bg_angle_end(lv_obj_t * arc)
102 功能:获取弧形背景的终止角度。
103 返回:端角[0..360]
104 形参:
105 arc:指向弧对象的指针
106
107 lv_arc_type_t lv_arc_get_type(constlv_obj_t *arc)
108 功能:获取圆弧是否为类型。
109 返回:弧形类型
110 形参:
111 arc:指向弧对象的指针
112
113 int16_t lv_arc_get_value(constlv_obj_t *arc)
114 功能:获取圆弧的值
115 返回:弧的值
116 形参
117 arc:指向弧对象的指针
118
119 int16_t lv_arc_get_min_value(constlv_obj_t *arc)
120 功能:获得圆弧的最小值
121 返回:圆弧的最小值
122 形参:
123 arc:指向弧对象的指针
124
125 int16_t lv_arc_get_max_value(constlv_obj_t *arc)
126 功能:获取圆弧的最大值
127 返回:弧的最大值
128 形参:
129 arc:指向弧对象的指针
130
131 bool lv_arc_is_dragged(constlv_obj_t *arc)
132 功能:给出弧线是否被拖动
133 返回:true:拖动进行中,false:未拖动
134 形参:
135 arc:指向弧对象的指针
136
137 bool lv_arc_get_adjustable(lv_obj_t * arc)
138 功能:获取圆弧是否可调。
139 返回:圆弧是否具有可以拖动的旋钮
140 形参:
141 arc:指向弧对象的指针