这是我在这里的第一个问题所以我提前为任何问题格式错误道歉。我试图用游戏的声音进行声音测验。这个想法是让用户点击按钮(圆形扬声器图标)并播放声音。然后,选择与该声音图标对应的四个图像中的一个。 App layout每次单击其中一个ImageView时,所有四个ImageView都应该更改资源。但是,当我点击任何一个ImageView时,应用程序变得非常慢,我得到对话框,要求我等待它回复,或者单击“确定”关闭它。
CPU监视器在那一刻显示了非常高的百分比。 memory and CPU usage monitor但是,我没有任何记忆超出界限
这是我的Array和ArrayLists的代码
int chosenSound;
int locationOfCorrectAnswer = 0;
Integer[] answers = new Integer[4];
ArrayList<Integer> sounds = new ArrayList<Integer>(Arrays.<Integer>asList(R.raw.dismember, R.raw.duel, R.raw.glimpse, R.raw.reapers_scythe, R.raw.vacuum));
ArrayList<Integer> icons = new ArrayList<Integer>(Arrays.<Integer>asList(R.drawable.dismember, R.drawable.duel, R.drawable.glimpse, R.drawable.reapers_schyte, R.drawable.vacuum));
这是产生新问题的方法:
public void generateQuestion() {
Random random = new Random();
chosenSound = random.nextInt(sounds.size());
if (alreadyUsedSounds.size() == icons.size()) {
Toast.makeText(getApplicationContext(), "You used all the sounds!!!", Toast.LENGTH_SHORT).show();
return;
} else {
while (alreadyUsedSounds.contains(icons.get(chosenSound))) {
chosenSound = random.nextInt(sounds.size());
}
}
locationOfCorrectAnswer = random.nextInt(4);
int incorrectAnswerLocation;
for (int i = 0; i < 4; i++) {
if (i == locationOfCorrectAnswer) {
answers[i] = icons.get(chosenSound);
} else {
incorrectAnswerLocation = random.nextInt(sounds.size());
while (incorrectAnswerLocation == chosenSound || Arrays.asList(answers).contains(icons.get(incorrectAnswerLocation))) {
incorrectAnswerLocation = random.nextInt(sounds.size());
}
answers[i] = icons.get(incorrectAnswerLocation);
}
}
button0.setImageResource(answers[0]);
button1.setImageResource(answers[1]);
button2.setImageResource(answers[2]);
button3.setImageResource(answers[3]);
}
现在,我不确定如何在没有应用程序崩溃的情况下设置这些ImageView资源。我想有一个非常简单的方法可以做到这一点,但作为一个初学者,我真的很感激任何帮助。先感谢您。