arctext控件

1. 使用场景

lvsf_arctext控件主要用于弧形文本(Arc Text)显示功能,提供了创建弧形文本对象、设置文本对齐方式、等间距排列等核心接口,支持灵活配置弧形文本的显示效果。

2. 核心接口说明

接口函数

功能说明

参数说明

lv_obj_t *lv_arctext_create(lv_obj_t *parent)

创建一个弧形文本对象

parent:指向父对象的指针,新创建的arctext对象将作为该父对象的子对象;
返回值:指向创建的arctext对象的指针

void lv_arctext_text(lv_obj_t *arctext, const char *text)

设置弧形文本的显示内容

arctext:指向弧形文本对象的指针;
text:待显示的字符串文本内容

void lv_arctext_set_align(lv_obj_t *arctext, lv_arctext_align_t align, int16_t angle)

设置基于角度的弧形文本对齐方式

arctext:指向弧形文本对象的指针;
align:对齐类型(LV_ARCTEXT_ALIGN_CENTER/LEFT/RIGHT);
angle:对齐角度值

void lv_arctext_set_equal_width(lv_obj_t *arctext, lv_coord_t width)

设置弧形文本中每个字符以等间距显示

arctext:指向弧形文本对象的指针;
width:每个字符的显示宽度(lv_coord_t类型)

void lv_arctext_set_snapshot(lv_obj_t *arctext, uint8_t en)

设置弧形文本的快照模式开关

arctext:指向弧形文本对象的指针;
en:快照模式使能(非0开启,0关闭)

void lv_arctext_set_mirror(lv_obj_t *arctext, uint8_t en)

设置弧形文本的排列方向(顺时针/逆时针)

arctext:指向弧形文本对象的指针;
en:1表示逆时针排列,0表示顺时针排列

3. 使用案例

本案例结合multlist控件展示lvsf_arctext控件的主要功能,主要包含文本相关参数的设置。

static lv_obj_t* p_list = NULL;
static lv_obj_t* demo_create_item(lv_obj_t* parent, lv_multlist_item_t* item)
{

    lv_obj_t* item_bg = lv_obj_create(parent);
    lv_obj_remove_style_all(item_bg);
    lv_obj_set_size(item_bg, LV_HOR_RES_MAX, LV_VER_RES_MAX);
    lv_obj_set_style_bg_opa(item_bg, LV_OPA_0, 0);
    lv_obj_center(item_bg);
    lv_obj_refr_size(item_bg);
    lv_obj_clear_flag(item_bg, LV_OBJ_FLAG_SCROLLABLE);
    lv_obj_add_flag(item_bg, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_EVENT_BUBBLE);

    lv_obj_t* circle = lv_obj_create(item_bg);
    lv_obj_remove_style_all(circle);
    lv_obj_set_size(circle, (LV_HOR_RES_MAX + 8) >> 1, (LV_HOR_RES_MAX + 8) >> 1);
    lv_obj_set_style_bg_color(circle, LV_COLOR_BLUE, 0);
    lv_obj_set_style_bg_opa(circle, LV_OPA_100, 0);
    lv_obj_set_style_radius(circle, LV_RADIUS_CIRCLE, 0);
    lv_obj_center(circle);
    lv_obj_refr_size(circle);
    lv_obj_clear_flag(circle, LV_OBJ_FLAG_SCROLLABLE);
    lv_obj_add_flag(circle, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_EVENT_BUBBLE);

    lv_obj_t* arctxt = lv_arctext_create(item_bg);
    lv_obj_set_size(arctxt, LV_HOR_RES_MAX >> 1, LV_HOR_RES_MAX >> 1);
    lv_obj_refr_size(arctxt);
    lv_obj_center(arctxt);
    //lv_arctext_set_snapshot(arctxt,true);
    lv_arctext_set_mirror(arctxt, false);
    lv_obj_set_style_radius(arctxt, LV_RADIUS_CIRCLE, 0);

    if (0 == item->index)
    {
        lv_obj_set_style_text_letter_space(arctxt, 4, 0);
        lv_arctext_set_align(arctxt, LV_ARCTEXT_ALIGN_CENTER, 0);
        lv_arctext_text(arctxt, "我是居中对齐  对齐0度方向");
    }   
    else if (1 == item->index)
    {
        lv_obj_set_style_text_letter_space(arctxt, 4, 0);
        lv_arctext_set_align(arctxt, LV_ARCTEXT_ALIGN_CENTER, 270);
        lv_arctext_text(arctxt, "我是居中对齐  对齐270度方向");
    }   
    else if (2 == item->index)
    {
        lv_obj_set_style_text_letter_space(arctxt, 4, 0);
        lv_arctext_set_align(arctxt, LV_ARCTEXT_ALIGN_RIGHT, 0);
        lv_arctext_text(arctxt, "我是右对齐   对齐0度方向");
    }
    else if (3 == item->index)
    {
        lv_obj_set_style_text_letter_space(arctxt, 4, 0);
        lv_arctext_set_align(arctxt, LV_ARCTEXT_ALIGN_LEFT, 0);
        lv_arctext_text(arctxt, "我是左对齐  对齐0度方向");
    }
    else if (4 == item->index)
    {
        lv_arctext_set_equal_width(arctxt, 60);
        lv_arctext_set_align(arctxt, LV_ARCTEXT_ALIGN_CENTER, 0);
        lv_arctext_text(arctxt, "我是等间距居中对齐");
    }
    else if (5 == item->index)
    {
        lv_ext_set_local_font(arctxt, FONT_BIGL, LV_COLOR_RED);
        lv_arctext_set_equal_width(arctxt, 60);
        lv_arctext_set_align(arctxt, LV_ARCTEXT_ALIGN_CENTER, 0);
        lv_arctext_text(arctxt, "我改变了字体样式");
    }

    return item_bg;
}

/* When using the solution application architecture, the functions that must be defined */
static void on_start(void)
{
    lv_obj_t* parent = lv_scr_act();

    lv_obj_t* p_list = lv_multlist_create(parent);
    lv_obj_remove_style_all(p_list);
    lv_obj_set_size(p_list, LV_HOR_RES_MAX, LV_VER_RES_MAX);
    lv_obj_set_style_bg_color(p_list, lv_color_make(82, 93, 118), 0);
    lv_obj_set_style_bg_opa(p_list, LV_OPA_COVER, 0);
    lv_obj_center(p_list);
    lv_obj_refr_size(p_list);
    lv_multlist_add_flag(p_list, LV_MULTLIST_FLAG_LOOP | LV_MULTLIST_FLAG_TOW_PAGE);
    lv_multlist_set_gap(p_list, 0);
    lv_multlist_set_scrl_pad(p_list, 0, 0);
    lv_multlist_set_dir(p_list, LV_MULTLIST_DIR_HOR);

    lv_multlist_set_item_cb(p_list, demo_create_item, NULL, NULL);
    lv_multlist_set_springback(p_list, 0, 0);
    //lv_multlist_set_first_align(p_list, LV_MULTLIST_ALIGN_CENTER, 0, 0);

    for (uint32_t i = 0; i < 6; i++)
    {
        lv_multlist_add_info(p_list, LV_HOR_RES, LV_VER_RES, NULL, NULL);
    }
}

/* When using the solution application architecture, the functions that must be defined */
static void on_resume(void)
{
    lv_gesture_disable();

    lv_multlist_on_resume(p_list);
    lv_multlist_enable_encoder(p_list, 5, 400, false);
}

/* When using the solution application architecture, the functions that must be defined */
static void on_pause(void)
{
    lv_gesture_enable();

    lv_multlist_on_pause(p_list);
    lv_multlist_disable_encoder(p_list);
}

/* When using the solution application architecture, the functions that must be defined */
static void on_stop(void)
{
    p_list = NULL;
}

3.2 案例效果展示

fishy

4. 注意事项

  1. 文本的间距可通过LVGL接口lv_obj_set_style_text_letter_space设置

  2. 默认起始角度为0,位于正上方12点方向。