如何让按钮改变背景在西蒙说安卓游戏

时间:2017-09-05 11:40:11

标签: android

对于运动,我正在android studio上做一个Simon Say游戏。

在一个onclick事件上,它去了玩游戏按钮序列的部分看起来像:

private void playSequence() {
    for (int i = 0; i < buttonsSequence.size(); i++) {
        buttonsSequence.get(i).setPressed(true);
        buttonsSequence.get(i).invalidate();
        playButton(buttonsSequence.get(i).getId());
        buttonsSequence.get(i).setPressed(false);
        buttonsSequence.get(i).invalidate();
    }
}

这是playButton:

private void playButton(int buttonId) {
    MediaPlayer mp = null;
    switch (buttonId) {
        case R.id.redButton:
            mp = MediaPlayer.create(this, R.raw.redsound);
            break;
        case R.id.blueButton:
            mp = MediaPlayer.create(this, R.raw.bluesound);
            break;
        case R.id.greenButton:
            mp = MediaPlayer.create(this, R.raw.green_sound);
            break;
        case R.id.yellowButton:
            mp = MediaPlayer.create(this, R.raw.yellow_sound);
            break;
        default:
            Toast toast = Toast.makeText(this, "the button I get is wrong. Please try again.", Toast.LENGTH_SHORT);
            toast.show();
            return;

    }
    mp.setVolume(1.0f, 1.0f);
    mp.start();
    //// TODO: twice the last to lanes later
    //busy waiting
    while (mp != null && mp.getCurrentPosition() < mp.getDuration() / 6.7) ;
    mp.stop();
}

每个按钮都有一个XML选择器,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/lightred"></item>
    <item android:drawable="@drawable/red3"></item>
</selector>

这里的问题: 第buttonsSequence.get(i).invalidate()行需要重新绘制按钮的背景,而且不是那个,我不明白为什么。 setPress()工作,所以这里发生了什么? 每个按钮都需要结果:

  1. 它改变了背景
  2. 已重新绘制
  3. 声音播放
  4. 它会改回原来的背景
  5. 它已被重新绘制
  6. 继续下一个按钮
  7. 我在这里错过了什么?

    修改

    更清楚,我希望重绘将在invalidate()之后立即发生。

0 个答案:

没有答案