txtimg控件¶
1. 使用场景¶
txtimg控件主要用于处理文本与图像结合的显示需求,适用于以下场景:
需要将文本以图像化形式展示,且支持文本的动态插入、替换、逐行添加的场景;
针对不支持将位图转换为A8格式的语言,可通过快照方式将文本转为图像并定位显示的场景;
需对文本图像进行缩放、尺寸刷新、动画控制(如水平动画、缓存动画等)的场景;
2. 接口说明¶
接口函数 |
功能说明 |
参数说明 |
|---|---|---|
lv_obj_t *lv_txtimg_create(lv_obj_t *parent) |
创建一个txtimg对象实例 |
parent:父对象指针,作为txtimg控件的容器 |
void lv_txtimg_set_txt(lv_obj_t *txtimg, const char *text) |
保留原有文本,插入最新的字符串 |
txtimg:txtimg控件实例指针;text:待插入的字符串指针 |
void lv_txtimg_ins_txt(lv_obj_t *txtimg, const char *text) |
替换原有字符串,清空之前的文本仅保留当前设置的字符串 |
txtimg:txtimg控件实例指针;text:待设置的字符串指针 |
int32_t lv_txtimg_set_txt_line(lv_obj_t *txtimg, const char *text) |
为txtimg控件添加一行文本 |
txtimg:txtimg控件实例指针;text:待添加的行文本字符串指针;返回值:该行文本的长度 |
int32_t lv_txtimg_snapshot_txt_line(lv_obj_t *txtimg, const char *text) |
针对不支持位图转A8格式的语言,通过摄像头接口拍摄文本并作为图像定位显示 |
txtimg:txtimg控件实例指针;text:待处理的文本字符串指针;返回值:该行文本的长度 |
void lv_txtimg_set_zoom(lv_obj_t *txtimg, lv_coord_t zoom) |
设置txtimg控件的缩放比例 |
txtimg:txtimg控件实例指针;zoom:缩放值(lv_coord_t类型) |
void lv_txtimg_refr_size(lv_obj_t *txtimg) |
刷新txtimg控件尺寸,适配文本显示区域 |
txtimg:txtimg控件实例指针 |
void lv_txtimg_set_flg(lv_obj_t *txtimg, uint32_t flg) |
设置txtimg控件的标志位(如动画、驻留等) |
txtimg:txtimg控件实例指针;flg:标志位值(LV_TXTIMG_ANIM_BUF等枚举组合) |
uint32_t lv_txtimg_get_flg(lv_obj_t *txtimg) |
获取txtimg控件当前的标志位配置 |
txtimg:txtimg控件实例指针;返回值:当前标志位值(uint32_t类型) |
3. 使用案例¶
3.1 文本转A8图片¶
电子书页面文本相对较多,将文本转A8图片有效缩短渲染时间
element = lv_txtimg_create(multlist);
lv_obj_set_size(element, w, h);
lv_txtimg_set_flg(element, LV_TXTIMG_ANIM_BUF);
lv_ext_set_local_text_font(element, font, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_ext_set_local_text_color(element, nvm->color_txt, LV_PART_MAIN | LV_STATE_DEFAULT);
const char *str = (const char *)&p_reader_txt->txt_buf[info->txt_pos];
lv_txtimg_set_txt_line(element, str);
3.2 带缩放且横向滚动滚动动画文本¶
使用文本缩放且需要滚动的情况
const lv_font_t *font = LV_EXT_FONT_GET(FONT_BIGL);
lv_obj_t *txtimg = lv_txtimg_create(item_btn);
lv_obj_remove_style_all(txtimg);
lv_obj_set_size(txtimg, LV_HOR_RES_MAX >> 1, item->org_h);
lv_obj_set_style_bg_opa(txtimg, LV_OPA_0, LV_STATE_DEFAULT);
lv_obj_add_flag(txtimg, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_EVENT_BUBBLE);
lv_obj_clear_flag(txtimg, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_align(txtimg, LV_ALIGN_RIGHT_MID, -20, 0);
lv_obj_refr_size(txtimg);
lv_obj_set_style_text_align(txtimg, LV_TEXT_ALIGN_CENTER, LV_STATE_DEFAULT);
lv_txtimg_set_flg(txtimg, LV_TXTIMG_HOR_ANIM | LV_TXTIMG_RESIDENCY);
lv_obj_set_style_text_font(txtimg, font, 0);
lv_obj_set_style_text_color(txtimg, LV_COLOR_WHITE, LV_STATE_DEFAULT);
#ifdef MAINMENU_STYLE_BG
const char *locale = nvm_sys_get(locale_lang);
if (!strcmp(locale, "ภาษาไทย ") || \
!strcmp(locale, "हंद") || \
!strcmp(locale, "العربية "))
{
lv_txtimg_snapshot_txt_line(txtimg, txt);
}
else
#endif
lv_txtimg_set_txt_line(txtimg, txt);
#endif
4. 注意事项¶
传入的文本字符串需保证有效,避免空指针或非法内存地址导致程序异常;
缩放值(zoom)需设置合理范围,过大或过小可能导致文本显示异常或性能损耗;
标志位设置需基于枚举值(LV_TXTIMG_ANIM_BUF/LV_TXTIMG_HOR_ANIM/LV_TXTIMG_RESIDENCY)组合,避免传入非法值;
控件尺寸刷新接口(lv_txtimg_refr_size)建议在文本内容、缩放、标志位修改后调用,确保显示效果正确;