LVGL 弧

弧(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 在按下/拖动弧以设置新值时发送。

了解有关 事件 的更多信息。

按键

对象类型不处理任何输入按键。

进一步了解 按键

范例

简单弧

LVGL弧

简单弧

上述效果的示例代码:

#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

圆弧加载进度条

LVGL弧

圆弧加载进度条

上述效果的示例代码:

#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:指向弧对象的指针
赞(1)
未经允许不得转载:极客笔记 » LVGL 弧
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址