当我的某些事件被触发时,我需要能够更改Libgdx Button
的外观。
这是我按钮的声明:
Button googleButton = new Button(skin.getDrawable("google_sign_in"));
以下是我尝试过的事情:
googleButton.setBackground(skin.getDrawable("google_sign_out"));
googleButton.invalidate();
googleButton.setChecked(true);
googleButton.invalidate();
googleButton.getStyle().up = skin.getDrawable("google_sign_out");
googleButton.invalidate();
我做了很多搜索,但我找不到答案。有人能告诉我这样做的正确方法吗?
答案 0 :(得分:5)
我认为问题是你在初始化Button
后改变了皮肤/样式的内容,但是按钮对象在初始化后没有引用样式。我也不完全清楚你的目标是什么。我假设您要显示“登录”按钮,直到用户登录,然后您希望该按钮成为“退出”按钮。
invalidate
方法只会触发重新布局(重新计算Actor
的大小/位置)。
也许尝试使用setStyle
强制使用样式,如下所示:
googleButton.getStyle().up = ... whatever;
googleButton.setStyle(googleButton.getStyle());
那就是说,我认为你最好有两个(?)不同的Button
对象(一个用于登录,一个用于登出)。将它们装在Stack中,然后让其中一个看不见(参见Actor.setVisible
)
答案 1 :(得分:2)
我设法让这个工作。在我的演员中,一个有6个可能图像的骰子:
public Dice(int options) {
super(new Button.ButtonStyle());
}
当我想换脸时:
public void setValue(int value) {
this.value = value;
Button.ButtonStyle style = getStyle();
style.up = new TextureRegionDrawable(
Assets.instance.dices.facesUp[value]);
style.down = new TextureRegionDrawable(
Assets.instance.dices.facesDown[value]);
style.checked = new TextureRegionDrawable(
Assets.instance.dices.facesChecked[value]);
setSize(getPrefWidth(), getPrefHeight());
}
我认为诀窍是在
setSize(getPrefWidth(), getPrefHeight());
如果我省略它,骰子不会显示。并且不需要setStyle或invalidate()。
答案 2 :(得分:1)
改为使用CheckBox课程;
1-为皮肤制作一个.json文件
{
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: fontfile.fnt } },
com.badlogic.gdx.graphics.Color: {
green: { a: 1, b: 0, g: 1, r: 0 },
white: { a: 1, b: 1, g: 1, r: 1 },
red: { a: 1, b: 0, g: 0, r: 1 },
black: { a: 1, b: 0, g: 0, r: 0 }
},
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
google-loggin: { checkboxOn: google_sign_in, checkboxOff: google_sign_out, font: default-font, fontColor: white }
},
}
2-制作皮肤
skin = new Skin(Gdx.files.internal("your.json-file.json"), new TextureAtlas("textureAtlas-file.pack"));
3-创建忽略第一个参数的按钮:
CheckBox loginButton = new CheckBox("", skin, "google-loging");
答案 3 :(得分:0)
只为通过谷歌搜索此内容的任何人。要在已经初始化之后更改已添加到皮肤文件中的样式的按钮样式:
btn.setStyle(skin.get("YOUR BTN STYLE",TextButton.TextButtonStyle.class));
答案 4 :(得分:0)
您必须将图像添加到按钮button_1.addActor(image)
。该图像将覆盖按钮原点皮肤。然后,您可以关闭并打开该图像image.setVisible(false)