lvgl背景设置为全透明后,为什么上面部件刷新都会带有黑边

image

时间的label以及容器,在主容器背景为透明情况下,会有这个黑边问题

在 lv_conf.h 中打开 LV_COLOR_SCREEN_TRANSP 看看

#define LV_COLOR_SCREEN_TRANSP 1
这个是使能的

请将你的关键代码段发出来看看。

是你写的代码段,字体用的是哪种字体,是如何转换的(转换参数)

主界面


lv_label_create的父对象,不建议是 lv_obj_create(NULL) 创建出来的对象。
如果你需要透明的背景,可以这样创建:

main_ui->screen_main = lv_obj_create(lv_scr_act());
lv_obj_remove_style_all(main_ui->screen_main);
lv_obj_set_size(main_ui->screen_main, LV_PCT(100), LV_PCT(100));

然后 screen_label_time 的父对象就不是 lv_obj_create(NULL) 创建出来的对象,这样应该能解决问题。

后续如果仍有问题,请帖代码文本,而不是截图贴代码图片。

#include "lvgl/lvgl.h"
#include "stdio.h"


static void my_cb(lv_timer_t *timer)
{
    static int i = 0;
    lv_obj_t *label = (lv_obj_t *) (timer->user_data);
    lv_label_set_text_fmt(label,"%d", i++);
}


void lv_time()
{

    // lv_obj_t *time_bg = lv_obj_create(NULL);//创建背景界面
    lv_obj_t * time_bg = lv_obj_create(lv_scr_act());
    lv_obj_remove_style_all(time_bg);
    lv_obj_set_size(time_bg, LV_PCT(100), LV_PCT(100));

    lv_obj_t *label =  lv_label_create(time_bg);
    lv_label_set_text_fmt(label,"%s", "0");
    lv_obj_set_style_text_color(label, lv_color_white(), LV_PART_MAIN);
    lv_obj_set_style_text_font(label, &lv_font_montserrat_40, LV_PART_MAIN);
    lv_obj_set_size(label, 200, 200);
    lv_obj_center(label);

    lv_timer_create(my_cb, 1000, label);
    lv_scr_load(time_bg);

}

首先基于活动屏幕创建,时间的label就不更新了一直是一个值,且仍旧有黑边锯齿现象。如果用NULL创建就可以更新新的时间值

注释掉这行试试看 lv_scr_load(time_bg);

注释掉,时间是可以动,但是底下的父对象屏幕就不在屏幕里了。而且黑边问题仍旧没有解决

你好, 请问解决黑边了吗, 我这边也遇到了同样的问题

在 static lv_disp_drv_t disp_drv; /Descriptor of a display driver/
lv_disp_drv_init(&disp_drv); 后设置
disp_drv.screen_transp = 1;

请问您的问题解决了么 您使用的那个版本的lvgl

是呢,前段时间刚好看到官方问题里有人提

你好,我也遇到同样的问题,请问你是怎么解决的呢

我们一直没有复现这个问题,如果有人想与我们一起探讨请留言你所使用硬件参数(主控、屏幕接口参数),以及关键代码段。


	static lv_style_t style_scr_act;
	if (style_scr_act.prop_cnt == 0) {
	    lv_style_init(&style_scr_act);
	    lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
	    lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
	}

    lv_disp_get_default()->driver->screen_transp = 1;

    lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_TRANSP);
    lv_memset_00(lv_disp_get_default()->driver->draw_buf->buf_act,
            lv_disp_get_default()->driver->draw_buf->size
                    * sizeof(lv_color32_t));
    lv_style_set_bg_opa(&style_scr_act, LV_OPA_TRANSP);
    lv_obj_report_style_change(&style_scr_act);

在对应的显示屏幕的初始化最前面加上这个 就行