arctext控件¶
1. 使用场景¶
lvsf_arctext控件主要用于弧形文本(Arc Text)显示功能,提供了创建弧形文本对象、设置文本对齐方式、等间距排列等核心接口,支持灵活配置弧形文本的显示效果。
2. 核心接口说明¶
接口函数 |
功能说明 |
参数说明 |
|---|---|---|
lv_obj_t *lv_arctext_create(lv_obj_t *parent) |
创建一个弧形文本对象 |
parent:指向父对象的指针,新创建的arctext对象将作为该父对象的子对象; |
void lv_arctext_text(lv_obj_t *arctext, const char *text) |
设置弧形文本的显示内容 |
arctext:指向弧形文本对象的指针; |
void lv_arctext_set_align(lv_obj_t *arctext, lv_arctext_align_t align, int16_t angle) |
设置基于角度的弧形文本对齐方式 |
arctext:指向弧形文本对象的指针; |
void lv_arctext_set_equal_width(lv_obj_t *arctext, lv_coord_t width) |
设置弧形文本中每个字符以等间距显示 |
arctext:指向弧形文本对象的指针; |
void lv_arctext_set_snapshot(lv_obj_t *arctext, uint8_t en) |
设置弧形文本的快照模式开关 |
arctext:指向弧形文本对象的指针; |
void lv_arctext_set_mirror(lv_obj_t *arctext, uint8_t en) |
设置弧形文本的排列方向(顺时针/逆时针) |
arctext:指向弧形文本对象的指针; |
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 案例效果展示¶
4. 注意事项¶
文本的间距可通过LVGL接口lv_obj_set_style_text_letter_space设置
默认起始角度为0,位于正上方12点方向。