如何更改libgdx标签中背景的颜色?

5 java android libgdx

我可以像这样改变字体的颜色

LabelStyle style1 = new LabelStyle(..some font..., 
                Color.valueOf("FF4500")
                );
label.setStyle(style1);
Run Code Online (Sandbox Code Playgroud)

但是如何更改背景?现在背景与设置的整个屏幕的背景相同

渲染方法lke this

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glClearColor(
            1.000f, 0.980f, 0.941f

            ,1);
Run Code Online (Sandbox Code Playgroud)

jwe*_*rle 10

Label label = new Label(labelText, skin);
Pixmap labelColor = new Pixmap(labelWidth, labelHeight, Pixmap.Format.RGB888);
labelColor.setColor(<your-color-goes-here>);
labelColor.fill();
label.getStyle().background = new Image(new Texture(labelColor)).getDrawable();
Run Code Online (Sandbox Code Playgroud)

基本上,使用Image类的getDrawable()函数来指定Label的LabelStyles背景Drawable的颜色.

这是我能够提出的最简单的解决方法,坦率地说,Label类中没有setBackground()是愚蠢的.

实际上,也许最简单的解决方法是破解Label类并为其添加setBackground()方法.

[编辑]完成后,请务必处理Pixmaps; 即labelColor.dispose();

[更新] @Mitrakov Artem提出了一个很好的观点:上述解决方案将影响此LabelStyle的所有实例.如果这不是您想要的,您可以创建一个新的LabelStyle,在其上使用上面的方法,然后将其保存到Label.引用Artem:"所以我建议创建一个新样式(LabelStyle style = new LabelStyle(label.getStyle());),更改其背景然后将其应用于标签(label.setStyle(style);)"

  • 非常好的解决方案,但实际上你改变了LabelStyle实例的外观.这意味着所有其他具有相同风格的标签都会受到影响.所以我建议创建一个新样式(`LabelStyle style = new LabelStyle(label.getStyle());`),更改其背景然后将其应用于标签(`label.setStyle(style);`) (3认同)

Ben*_*nnX 3

实际上你并没有像那样改变标签的背景。你只是改变了透明颜色。我猜你知道这一点。

要更改背景,您需要更改标签样式的背景。为此,我建议使用简单的NinePatch背景(可以是正方形!如果它是白色的,您可以更改九块的颜色,背景颜色也会改变!)

NinePatch temp = new NinePatch(new Texture(....), 10, 10, 10, 10); //edges
Run Code Online (Sandbox Code Playgroud)

有关 ninepatch 的更多信息,请查看此处 libgdx wiki ninepatch

需要将该 ninepatch 添加到 Skin 对象中。例如像这样

Skin skin = new Skin();
skin.add("background",temp)
Run Code Online (Sandbox Code Playgroud)

之后,您可以从皮肤中获取可绘制的内容,您可以将其设置为背景LabelStyle

style1.background = skin.getDrawable("background");
Run Code Online (Sandbox Code Playgroud)

请参阅libgdx API LabelStyle

您还可以使用简单的位图,但它会缩放到标签大小,这在大多数情况下会导致变形。Ninepatch 可以在不变形的情况下进行缩放。

  • 我不能只设置背景颜色吗? (2认同)