我正在开发一个用户玩android的棋盘游戏。由于android非常快,我想假装android正在执行一些艰难的计算,因此需要时间进行下一步。
我想做什么: -
我尝试过: -
onAndroidTurn(){
textView1.setVisibility(View.VISIBLE);
Thread.sleep(2000);
textView2.setVisibility(View.GONE);
}
但是会发生什么是线程睡眠但文本没有显示(好吧我知道为什么)。
然后在stackoverflow上搜索,我学会了一种方法: -
onAndroidTurn(){
textView1.setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable(){
void run() {
textView1.setVisibility(View.GONE);
}
}, 2000);
}
现在这样做是因为它在另一个线程中运行该文本并且在屏幕上更新了android并且在移动它之后转向android显示“Thinking”是完全愚蠢。
我能为此做些什么?
答案 0 :(得分:1)
尝试以下方法:
这样的事情:
onAndroidTurn(){
textView1.setVisibility(View.VISIBLE);
saveMove(calculateNextMove());
new Handler().postDelayed(new Runnable(){
void run() {
textView1.setVisibility(View.GONE);
doNextMove(restoreMove());
}
}, 2000);
}
答案 1 :(得分:1)
也许你可以使用AsyncTask(就像这个伪代码):
private class ShowTextTask extends AsyncTask<Void, Void, Void> {
protected void onPreExecute(Void... result) {
textView.setText("Initital");
}
protected Long doInBackground(Void... urls) {
Thread.sleep(2000);
}
protected void onPostExecute(Void... result) {
textView.setText("After 2 seconds");;
}
}
答案 2 :(得分:0)
好的,我这样做了: -
public void androidThinking(){
textView1.setVisibility(View.VISIBLE);
androidThinking = true; //explained below
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
droidThink.setVisibility(View.GONE);
//CODE for android's turn
androidThinking = false; //explained below
}
}, 2000);
设置为true时androidThinking通过强制监听器让用户的按钮过早返回来阻止用户移动
btn.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View v) {
if(androidThinking)
return;
感谢大家的回复。