================================== 弧(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`` 在按下/拖动弧以设置新值时发送。 了解有关 `事件`_ 的更多信息。 .. _通用事件: http://lvgl.100ask.net/documentation/03_overview/03_events.html#id2 .. _事件: http://lvgl.100ask.net/documentation/03_overview/03_events.html 按键 ################################## 对象类型不处理任何输入按键。 进一步了解 `按键`_ 。 .. _按键: http://lvgl.100ask.net/documentation/03_overview/05_indev.html 范例 ################################## 简单弧 ********************************** .. figure:: http://photos.100ask.net/lvgl/04_widgets/02_arc/01_lv_ex_arc1.png 简单弧 上述效果的示例代码: .. code-block:: c :linenos: #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 圆弧加载进度条 ********************************** .. figure:: http://photos.100ask.net/lvgl/04_widgets/02_arc/02_lv_ex_arc2.png 圆弧加载进度条 上述效果的示例代码: .. code-block:: c :linenos: #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 ********************************** .. code-block:: c :linenos: 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 ********************************** .. code-block:: c :linenos: 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, }; 函数 ********************************** .. code-block:: c :linenos: 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:指向弧对象的指针