弧(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
从中间点绘制到当前值的指示弧。
事件
除 通用事件 外,弧还发送以下特殊事件:
LV_EVENT_VALUE_CHANGED
在按下/拖动弧以设置新值时发送。
了解有关 事件 的更多信息。
按键
对象类型不处理任何输入按键。
进一步了解 按键 。
范例
简单弧
简单弧
上述效果的示例代码:
#include "../../../lv_examples.h"
#if LV_USE_ARC
void lv_ex_arc_1(void)
{
/*Create an Arc*/
lv_obj_t * arc = lv_arc_create(lv_scr_act(), NULL);
lv_arc_set_end_angle(arc, 200);
lv_obj_set_size(arc, 150, 150);
lv_obj_align(arc, NULL, LV_ALIGN_CENTER, 0, 0);
}
#endif
圆弧加载进度条
圆弧加载进度条
上述效果的示例代码:
#include "../../../lv_examples.h"
#if LV_USE_ARC
/**
* An `lv_task` to call periodically to set the angles of the arc
* @param t
*/
static void arc_loader(lv_task_t * t)
{
static int16_t a = 270;
a+=5;
lv_arc_set_end_angle(t->user_data, a);
if(a >= 270 + 360) {
lv_task_del(t);
return;
}
}
/**
* Create an arc which acts as a loader.
*/
void lv_ex_arc_2(void)
{
/*Create an Arc*/
lv_obj_t * arc = lv_arc_create(lv_scr_act(), NULL);
lv_arc_set_bg_angles(arc, 0, 360);
lv_arc_set_angles(arc, 270, 270);
lv_obj_align(arc, NULL, LV_ALIGN_CENTER, 0, 0);
/* Create an `lv_task` to update the arc.
* Store the `arc` in the user data*/
lv_task_create(arc_loader, 20, LV_TASK_PRIO_LOWEST, arc);
}
#endif
相关API
Typedefs
typedef uint8_t lv_arc_type_t;
typedef uint8_t lv_arc_part_t;
/* 弧的数据 */
typedef struct {
/* 此类型的新数据 */
uint16_t rotation_angle; /* 旋转角度 */
uint16_t arc_angle_start; /* 开始角度 */
uint16_t arc_angle_end; /* 结束角度 */
uint16_t bg_angle_start; /* 背景开始角度 */
uint16_t bg_angle_end; /* 背景结束角度 */
lv_style_list_t style_arc; /* 样式 */
lv_style_list_t style_knob; /* 旋钮样式 */
int16_t cur_value; /* 弧当前值 */
int16_t min_value; /* 弧的最小值 */
int16_t max_value; /* 弧的最大值 */
uint16_t dragging : 1;
uint16_t type : 2;
uint16_t adjustable : 1;
uint16_t min_close : 1; /* 1:最后一个压角更接近最小端 */
uint16_t chg_rate; /* 阻力角圆弧变化率(度/秒) */
uint32_t last_tick; /* 弧的最后拖拽事件时间戳 */
int16_t last_angle; /* 弧的最后拖曳角 */
} lv_arc_ext_t;
enums
enum {
LV_ARC_TYPE_NORMAL, /* 正常类型 */
LV_ARC_TYPE_SYMMETRIC, /* 对称类型 */
LV_ARC_TYPE_REVERSE /* 逆向类型 */
};
/* 弧的部分 */
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,
};
函数
lv_obj_t * lv_arc_create(lv_obj_t * par,constlv_obj_t *copy)
功能:创建弧对象
返回:指向创建的弧的指针
形参:
par:指向对象的指针,它将是新弧的父对象
copy:指向弧对象的指针,如果不为NULL,则将从其复制新对象
void lv_arc_set_start_angle(lv_obj_t * arc,uint16_t start)
功能:设置圆弧的起始角度。0度:右,90底等。
形参:
arc:指向弧对象的指针
start:起始角度
void lv_arc_set_end_angle(lv_obj_t * arc,uint16_t end )
功能:设置圆弧的起始角度。0度:右,90底等。
形参:
arc:指向弧对象的指针
end:结束角度
void lv_arc_set_angles(lv_obj_t * arc,uint16_t start,uint16_t end)
功能:设置开始和结束角度
形参:
arc:指向弧对象的指针
start:起始角度
end:结束角度
void lv_arc_set_bg_start_angle(lv_obj_t * arc,uint16_t start)
功能:设置弧形背景的起始角度。0度:右,90底等。
形参:
arc:指向弧对象的指针
start:起始角度
void lv_arc_set_bg_end_angle(lv_obj_t * arc,uint16_t end)
功能:设置弧形背景的起始角度。0度:右,90底等。
形参:
arc:指向弧对象的指针
end:结束角度
void lv_arc_set_bg_angles(lv_obj_t * arc,uint16_t start,uint16_t end)
功能:设置弧形背景的开始和结束角度
形参:
arc:指向弧对象的指针
start:起始角度
end:结束角度
void lv_arc_set_rotation(lv_obj_t * arc,uint16_t rotation_angle)
功能:设置整个圆弧的旋转
形参:
arc:指向弧对象的指针
rotation_angle:旋转角度
void lv_arc_set_type(lv_obj_t * arc,lv_arc_type_t type)
功能:设置圆弧的类型。
形参:
arc:指向弧对象的指针
type:圆弧型
void lv_arc_set_value(lv_obj_t * arc,int16_t值)
功能:在圆弧上设置一个新值
形参:
arc:指向弧对象的指针
value:新价值
void lv_arc_set_range(lv_obj_t * arc,int16_t min,int16_t max)
功能:设置圆弧的最小值和最大值
形参:
arc:指向弧对象的指针
min:最小值
max:最大值
void lv_arc_set_chg_rate(lv_obj_t * arc,uint16_t threshold)
功能:设置圆弧旋钮增量位置的阈值。
形参
arc:指向弧对象的指针
threshold:增量阈值
void lv_arc_set_adjustable(lv_obj_t * arc,bool adjustable)
功能:设置圆弧是否可调。
形参:
arc:指向弧对象的指针
adjustable:圆弧是否具有可以拖动的旋钮
uint16_t lv_arc_get_angle_start(lv_obj_t * arc)
功能:获取圆弧的起始角度。
返回:起始角度[0..360]
形参:
arc:指向弧对象的指针
uint16_t lv_arc_get_angle_end(lv_obj_t * arc)
功能:获取圆弧的末端角度。
返回:端角[0..360]
形参:
arc:指向弧对象的指针
uint16_t lv_arc_get_bg_angle_start(lv_obj_t * arc)
功能:获取弧形背景的起始角度。
返回:起始角度[0..360]
形参:
arc:指向弧对象的指针
uint16_t lv_arc_get_bg_angle_end(lv_obj_t * arc)
功能:获取弧形背景的终止角度。
返回:端角[0..360]
形参:
arc:指向弧对象的指针
lv_arc_type_t lv_arc_get_type(constlv_obj_t *arc)
功能:获取圆弧是否为类型。
返回:弧形类型
形参:
arc:指向弧对象的指针
int16_t lv_arc_get_value(constlv_obj_t *arc)
功能:获取圆弧的值
返回:弧的值
形参
arc:指向弧对象的指针
int16_t lv_arc_get_min_value(constlv_obj_t *arc)
功能:获得圆弧的最小值
返回:圆弧的最小值
形参:
arc:指向弧对象的指针
int16_t lv_arc_get_max_value(constlv_obj_t *arc)
功能:获取圆弧的最大值
返回:弧的最大值
形参:
arc:指向弧对象的指针
bool lv_arc_is_dragged(constlv_obj_t *arc)
功能:给出弧线是否被拖动
返回:true:拖动进行中,false:未拖动
形参:
arc:指向弧对象的指针
bool lv_arc_get_adjustable(lv_obj_t * arc)
功能:获取圆弧是否可调。
返回:圆弧是否具有可以拖动的旋钮
形参:
arc:指向弧对象的指针