LibGDX - ImageButton - 设置图像与背景

时间:2014-10-17 16:45:08

标签: android libgdx

据我了解,ImageButton中的LibGDX是包含图片的框架。是否可以设置框架的背景?

例如,我想使用Button背景,并在该图像的顶部应用一个Icon。

当前代码

具有背景的皮肤:

"com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle": {
    "default": {
        "imageDown": "button-down", 
        "imageUp": "button-up"
    }
}

创建ImageButton:

// Getting imageButtonStyle with "default" style, as it just has the background.
ImageButton.ImageButtonStyle imageButtonStyle = skin.get( "default", ImageButton.ImageButtonStyle.class );
ImageButton button = new ImageButton( imageButtonStyle );
// Set the image on the button to something.

背景图片。

static background Button image

带有图标的背景图片。

static background Button image with heart icon static background Button image with mail icon

感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

诀窍是使用2种不同的样式。 ImageButtonStyle用于设置图标属性,但由于ImageButtonStyle扩展了ButtonStyle,因此背景属性在ButtonStyle中设置。类似的东西:

ImageButtonStyle style = new ImageButtonStyle();
style.up           = background;
style.down         = background;
style.checked      = background;
style.imageUp      = icon_up;
style.imageDown    = icon_down;
style.imageChecked = icon_checked;
style.unpressedOffsetY = -20; // to "not" center the icon
style.unpressedOffsetX = -30; // to "not" center the icon

ImageButton heartButton = new ImageButton(style);
ImageButton envelopeButton = new ImageButton(envelopeStyle);

类似的东西(对我来说,背景,icon_ *都是Drawable)。但这就是基础知识,对我来说就像是一种魅力。

答案 1 :(得分:4)

您可以实现自己的扩展ImageButton的按钮类。 然后,如果重载构造函数,可以将imageUp,imageDown和background的Drawables或Textures传递给它:

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.scenes.scene2d.utils.SpriteDrawable;

public class myButton extends ImageButton
{   
    public myButton(Texture texture_up, Texture texture_down, Texture background)
    {
        super(new SpriteDrawable(new Sprite(texture_up)),
              new SpriteDrawable(new Sprite(texture_down)));

        this.setBackground(new SpriteDrawable(new Sprite(background));
    }
}

现在,您可以使用自己的Button类并按如下方式实例化它:

Texture textureUp   = new Texture(Gdx.files.internal("data/image_up.png"));
Texture textureDown = new Texture(Gdx.files.internal("data/image_down.png"));
Texture background  = new Texture(Gdx.files.internal("data/background.png"));
MyButton myButton   = new MyButton(textureUp, textureDown, background);

也许稍微玩一下,你就会发现你还能用它做些什么。只需确保您的图像具有正确的分辨率。背景不一定是图像。

答案 2 :(得分:0)

按定义,按钮将有三种状态:

imageDown - 在按钮上单击鼠标时

imageUp - 在按钮上释放鼠标时

imageChecked - 当鼠标悬停在按钮上时

在scene2d api中,还没有办法手动设置imageButton的背景图像,但如果你确实想要这样的东西最好有一个图像数组和一个关于你想要的图像的索引,并使用精灵批量例如:

Texture[] images;
int currentImage;