Android - 隐藏文字 - >显示文字2秒 - >再次隐藏文字

时间:2013-07-12 14:37:40

标签: java android multithreading thread-sleep

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

我想做什么: -

  1. 用户转身 - 他动了。
  2. Android转 - android显示文字“我正在思考”2秒
  3. Android会隐藏该文字和,并且只有在移动后
  4. 我尝试过: -

    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”是完全愚蠢。

    我能为此做些什么?

3 个答案:

答案 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;

感谢大家的回复。