java - ImageButton 和首选项

标签 java android libgdx scene2d

如何创建一个 ImageButton (musicButton) 来控制打开或关闭音乐?

我有 GamePrefs 类,它有这两种方法

public static void setBoolean(String name, boolean val) {
    prefs.setBoolean(name, val);
    prefs.flush();
}

public static boolean getBoolean(String name) {
    return prefs.getBoolean(name);
}

musicButton 我有两张图片

Texture t1 = new Texture("music");
Texture t2 = new Texture("music_off");
TextureRegion tr1 = new TextureRegion(t1);
TextureRegion tr2 = new TextureRegion(t2);

我知道我需要做一个 ImageButtonStyle 但我有很多字段 imageUp, imageDown, checked, checkedOver...不知道应该用哪两个

我需要它来响应触摸和将当前音乐设置更改为打开或关闭

像这样:

GamePrefs.setBoolean("music", false)GamePrefs.setBoolean("music", true)

我将使用getBoolean() 来决定是否播放音乐

有什么帮助吗?

最佳答案

为了创建此类按钮,我使用了带有 upchecked 属性的 ImageButton.ImageButtonStyle:

public Button getMusicButton() {
    final Button button = new ImageButton(getMusicButtonStyle());
    button.setChecked(Prefs.isMusicOn());
    button.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent event, float x, float y) {
            MusicHandler.getInstance().toggleMusic();
        }
    });
    return button;
}

private ImageButton.ImageButtonStyle getMusicButtonStyle() {
    ImageButton.ImageButtonStyle style = new ImageButton.ImageButtonStyle();
    style.up = musicOffDrawable;
    style.checked = musicOnDrawable;
    return style;
}

对于音乐和声音,我有 MusicHandler 类和这个方法:

public void toggleMusic() {
    Prefs.toggleMusic();
    if (!Prefs.isMusicOn()) {
        music.stop();
    } else {
        music.play();
    }
}

最后在 Prefs 类中有:

public static boolean isMusicOn() {
    return pref.getBoolean(MUSIC_ON);
}

public static void toggleMusic() {
    pref.putBoolean("music_on", !isMusicOn());
    pref.flush();
}

关于java - ImageButton 和首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38804399/

相关文章:

java - 使用 selenium 运行时 window.showModalDialog 不出现

java - 从/assets/filename 公钥加载 X509Certificate 不正确

Libgdx:监听 TextField 上的点击

java - 在 libgdx 中填充 2D 弯曲凹形状

java - 如果文档使用大型 Map 字段,则 Firebase Firestore 查询错误

android - Maps API 在 animateTo() 方法上抛出 NullPointerException

android - 嵌套 fragment getchildfragmentmanager 导致崩溃

java - 无法从不同包中的 Activity 启动 Android 服务

ios - libgdx ios 应用程序因无法在使用 Ec2 和 Kryonet 的 IPv6 网络上工作而被拒绝

java - 字符串模式检测