在父对象下使用lv_obj_set_pos()设置位置出错

在当前屏幕下使用lv_obj_set_pos()创建位置是正常,在父对象创建位置就会有很大偏差。
1683596299903
image

第一张图是正常的,第二张图是在父对象下设置的,第三张图是代码。

非常抱歉,没看懂你的问题所在。

设置坐标0.0,显示有偏移,如果不在父对象下创建的控件位置就是对的

可以分别执行这两段代码就可以看到现象了

//在父对象下:(设置的图片位置有偏差)
obj_heart_rate_bg1 = lv_obj_create(lv_scr_act());
lv_obj_set_size(obj_heart_rate_bg1, 240, 240);
lv_obj_t * img01 = lv_img_create(obj_heart_rate_bg1);
lv_img_set_src(img01, &file_3_09);
lv_obj_set_size(img01, 40, 35);
lv_obj_set_pos(img01, 59, 27);

//在当前屏幕下:(正常)
lv_obj_t * img01 = lv_img_create(lv_scr_act());
lv_img_set_src(img01, &file_3_09);
lv_obj_set_size(img01, 40, 35);
lv_obj_set_pos(img01, 59, 27);

有解决方法吗,换其他api也可以,只要坐标是对的就行

如果你将obj作为img的容器,那么需要注意obj本身是有样式的,其中obj的pad、border等导致pos的偏移,看代码最好理解,示例:

    LV_IMG_DECLARE(img_cogwheel_argb);

    lv_obj_t * cont_img = lv_obj_create(lv_scr_act());
   /*如果注释下面这行代码,将会在屏幕上看到两个颜色不一样的img*/
    lv_obj_remove_style_all(cont_img);
    lv_obj_set_size(cont_img, 240, 240);

    lv_obj_t * img1 = lv_img_create(cont_img);
    lv_img_set_src(img1, &img_cogwheel_argb);
    lv_obj_set_pos(img1, 59, 27);
    lv_obj_set_style_img_recolor_opa(img1, LV_OPA_100, 0);
    lv_obj_set_style_img_recolor(img1, lv_color_hex(0xfb6600), 0);


    lv_obj_t * img2 = lv_img_create(lv_scr_act());
    lv_img_set_src(img2, &img_cogwheel_argb);
    lv_obj_set_pos(img2, 59, 27);

所以,如果你只是将obj作为容器,一般最好将其 remove_style_all 然后再定制你想要的样式,如果不清除原有的样式,那么就要注意其原有的样式对布局的影响。

1 个赞