2016-08-14 5 views
0

私はImageButtonを持っています。そのためのテクスチャは、基本的に白い四角形で、黒いテキストが中央にあります。私はこのボタンの色を動的に変更できるようにしたい。問題は、ImageButton.setColorは何もしないことです。私はImageButtonStyleの色合いを呼び出すことができますが、プレーヤーがボタンをクリックすると、色を変更することができます。ありがとう!ここではいくつかのコードです:Libgdx |シーン2d | ImageButton setColorが機能しない

ImageButton.ImageButtonStyle style_button_music = new ImageButton.ImageButtonStyle(); 
    style_button_music.imageChecked = new SpriteDrawable(new Sprite((Texture) Game.assetManager.get("button_music.png"))); 
    style_button_music.imageUp = new SpriteDrawable(new Sprite((Texture) Game.assetManager.get("button_music.png"))); 
    style_button_music.imageDisabled = new SpriteDrawable(new Sprite((Texture) Game.assetManager.get("button_music.png"))); 

    button_music = new ImageButton(style_button_music); 
    button_music.setColor(new Color(22f/255f, 100f/255f, 255f/255f, 1f)); 

    table.setFillParent(true); 
    table.setDebug(true); 

    table.top(); 
    table.pad(100); 

    table.add(button_music).width(200).height(200); 
    stage.addActor(table); 
+0

button_music.getColor();で色の値を確認してみます。それが変更された場合、それはビューをリフレッシュしてsthでなければなりません – kolboc

答えて

0

使用

button_music.getImage().setColor(Color color) 

ImageButtonsetColor()がちょうどActorからメソッドを継承しているが、それは何もしません。

+0

それは何かをします...それは、ボタンのバックグラウンドdrawableを色づけします。 – Tenfour04

0

アクターの色は子供にカスケードされません(アルファ成分を除く)。 ImageButtonのImageはButtonの子であるため、ImageはButtonの色を継承しません。

しかし、現在使用している方法では、プレーンなボタンを使用して背景画像を設定することができます。それは色づいています。

style_button_music.checked = new TextureRegionDrawable(new TextureRegion(Game.assetManager.get("button_music.png"))); 
style_button_music.up = style_button_music.checked; 
style_button_music.disabled = style_button_music.checked; 

おそらく、SpriteDrawableではなくTextureRegionDrawableを使用しているはずです。はるかに軽量のオブジェクトで、Spritesのボタンに余分なオーバーヘッドが必要なことはまれです。

実際のImageButtonを使用し、それを動的に再描画する必要がある場合は、ImageButtonをサブクラス化し、そのactメソッドを使用して色をその子に転送できます。あなたはそれでColorActionsを使うことができます。

@Override 
public void act (float delta) { 
    super.act(delta); 
    Color color = getColor(); 
    getImage().setColor(color.r, color.g, color.b, 1f); //leave opaque, alpha transferred in draw() 
} 
関連する問題