我知道 java/androidStudio 中的Thread.sleep()
andpostDelayed()
函数。但这里有一个问题,我正在创建一个西蒙说游戏的复制品。
我创建了一个generateSequence()
函数,将 1-9 的数字随机放入一个名为sequence
. 之后,我需要显示这些序列,这基本上会改变 textView 的背景一秒钟,然后使用该postDelayed()
函数返回其原始背景。
这是我的代码:
private void displaySequence(){
for(int i = 0; i < sequence.size(); i++) {
if(sequence.get(i) == 1) {
viewCard11.setBackgroundResource(R.drawable.text_view_circle4);
proceed = false;
handler.postDelayed(() -> {
viewCard11.setBackgroundResource(R.drawable.text_view_circle3);
proceed = true;
}, 1000);
}
else if(sequence.get(i) == 2) {}
else if(sequence.get(i) == 3) {}
else if(sequence.get(i) == 4) {}
else if(sequence.get(i) == 5) {}
else if(sequence.get(i) == 6) {}
else if(sequence.get(i) == 7) {}
else if(sequence.get(i) == 8) {}
else if(sequence.get(i) == 9) {}
while(!proceed) {}
}
}
但问题postDelayed()
在于,只有函数内部的任何内容都会被延迟。这意味着如果它sequence
有 2 个元素,它将同时闪烁背景。for
循环不会等待 完成它应该做的任何postDelayed
事情,而是递增并继续放置下一个postDelayed
。
为了解决这个问题,我尝试使用proceed
布尔变量作为延迟。我所做的是,在我们调用 之前postDelayed
,我设置proceed
为false
。由于它不会等待postDelayed()
,它将转到下一行代码,即while
循环。
通过设置proceed
为假,我用它来创建一个无限循环。但是这个无限循环会被已完成postDelayed()
的as打断,proceed
在里面设置为true,然后代码就可以继续for
循环了。
但我不确定为什么它根本不起作用。当我运行代码时,它只显示一个空白屏幕。似乎问题存在于无限while
循环中并且postDelayed()
无法更新proceed
变量。
我尝试将Thread.sleep(1000)
其用作 的替代品postDelayed
,但在启动过程中,无论参数传递到多长时间,程序都只是显示白色背景Thread.sleep()
我已经用尽了我的选择,我希望有人有更好的主意。谢谢你。