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
fishy

4. 注意事项

  1. 传入的文本字符串需保证有效,避免空指针或非法内存地址导致程序异常;

  2. 缩放值(zoom)需设置合理范围,过大或过小可能导致文本显示异常或性能损耗;

  3. 标志位设置需基于枚举值(LV_TXTIMG_ANIM_BUF/LV_TXTIMG_HOR_ANIM/LV_TXTIMG_RESIDENCY)组合,避免传入非法值;

  4. 控件尺寸刷新接口(lv_txtimg_refr_size)建议在文本内容、缩放、标志位修改后调用,确保显示效果正确;