2013-06-27 4 views
3

Мне нужно изменить внешний вид Libgdx Button, когда некоторые из моих событий активированы.Изменение внешнего вида кнопки Libgdx

Вот декларация моей кнопки:

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

Проблема в том, я не хочу, чтобы изменить его внешний вид на вверх и вниз события, это событие, не имеют связи с самой кнопкой, которая должна переключать изображение. –

+0

Мне нужно иметь возможность изменить изображение, а не иметь то же самое. Может быть, мне не нужно использовать кнопку, какой тип актера я должен использовать, чтобы иметь возможность менять свое изображение на лету? –

+0

Можете ли вы опубликовать стиль «google_sign_in»? –

ответ

5

Я думаю, проблема в том, что вы меняете содержимое скина/стиля после инициализации Button, но объект кнопки не ссылается на стиль после его инициализации. Я также не совсем понимаю, что вы собираетесь делать. Я предполагаю, что вы хотите показать кнопку входа в систему, пока пользователь не войдет в систему, а затем вы хотите, чтобы эта кнопка была «выходила».

Метод invalidate просто запускает повторную компоновку (для пересчета размера/местоположения Actor).

Может попробовать принудительную стиль с setStyle, как это:

googleButton.getStyle().up = ... whatever; 
    googleButton.setStyle(googleButton.getStyle()); 

То есть, я думаю, вы бы лучше иметь два различных Button объектов (один для входа в систему, и один для регистрации (?) вне). Упакуйте их в Stack и просто сделайте одно или другое невидимым (см. Actor.setVisible)

+0

Я уже пробовал устанавливать стиль после его инициализации, но он ничего не делает. С уважением, Stack совершенно бесполезен, это просто вектор, он не изменит индекс z элементов в нем ... Мне удалось изменить кнопку, видимую, переключив видимость обеих кнопок, как вы предлагали. Я просто надеялся, что есть способ сделать это только с одним актером. –

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()); 

If Я опускаю это, кости не отображаются. И нет необходимости в setStyle или invalidate().

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"); 
0

Просто для тех, кто ищет это через Google.Для того, чтобы изменить стиль кнопки из стиля уже добавлен в ваш файл кожа, после того, как уже инициализация:

btn.setStyle(skin.get("YOUR BTN STYLE",TextButton.TextButtonStyle.class)); 
Смежные вопросы