时间的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);
在对应的显示屏幕的初始化最前面加上这个 就行