0

我正在开发用户使用 android 玩的棋盘游戏。由于 android 非常快,我想假装 android 正在执行一些艰难的计算,因此需要时间进行下一步。

我想做的事:-

  1. 用户转 - 他移动。
  2. Android转-android显示文字“我在想”2秒
  3. 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”是完全愚蠢的。

我能为此做些什么?

4

3 回答 3

1

尝试以下操作:

  • 显示“我在想”
  • 计算你的移动,但不实际移动,只是存储一段时间
  • 计划计时器
  • 当计时器用完时,删除文本并移动

像这样的东西:

onAndroidTurn(){
    textView1.setVisibility(View.VISIBLE);
    saveMove(calculateNextMove());
    new Handler().postDelayed(new Runnable(){
        void run() {
            textView1.setVisibility(View.GONE);
            doNextMove(restoreMove());
        }
    }, 2000);
}
于 2013-07-12T15:08:20.927 回答
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");;
     }
 }
于 2013-07-12T15:23:04.083 回答
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);

androidThinking 设置为 true 时,通过强制用户按钮的侦听器过早返回来阻止用户轮到他

btn.setOnClickListener(new View.onClickListener(){
  @Override
  public void onClick(View v) {
    if(androidThinking)
      return;

谢谢大家的回复。

于 2013-07-12T15:31:13.350 回答