对于运动,我正在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()
工作,所以这里发生了什么?
每个按钮都需要结果:
我在这里错过了什么?
修改
更清楚,我希望重绘将在invalidate()
之后立即发生。