如何在android中等待按钮点击一会儿

时间:2015-03-17 21:26:42

标签: android multithreading algorithm button text-to-speech

我正在开发百叶窗应用程序。

我有4个屏幕大小的按钮(重叠)。程序一个按钮的每一步都是可点击的,每个按钮都有多个作业。

我的程序以语音(Android TTS引擎)开头。喜欢“请触摸屏做x”。在这一步之后,我想等待按钮点击3秒,如果没有点击按钮发声“请触摸屏做y”并再次等待3秒作业y。 (x和y是第一个按钮的工作)。

按钮应根据触摸屏执行其中一个操作。但是,我如何等待按钮3秒钟并继续发出下一个选项并再次等待3秒钟。

如果单击第一个按钮,它将消失 - 按钮2将被点击 - 并且TTS引擎将开始发声第二个按钮选项。应用程序将是这样的工作,但我陷入等待按钮点击部分。

2 个答案:

答案 0 :(得分:0)

您可以通过忙碌等待来解决您的问题。 所以在你第一次发声后“请触摸屏......”之后你就会开始一个等待特定时间的后台线程,如下所示:

new Thread(new Runnable() {
        public void run() {
            Thread.sleep(3000);
            runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //vocalize
                    }
                });
        }
    }).start();

正如您所看到的,在线程内,新的runnable在3秒后启动,再次在UI线程上运行。这,因为我想我记得你应该只从UI线程中制作这样的声音(取决于你如何播放文件/声音的方法)。

然而,这只是一个想法,我无法测试运行我的代码! 但我希望我能激励你!

此致 我

答案 1 :(得分:0)

我建议你改用android.os.Handler。在你的情况下,你可以做这样的事情:

public void onCreate() {
  this.handler = new Handler()
  playTheVoiceOfThingX()
  viewToTap.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick(View v) {
      doThingX();
    }
  });
  handler.postDelayed(new PrepareThingYTask(), 3000);
}
class PrepareThingYTask() implements Runnable {
   viewToTap.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick() {
        doThingY();
     }
   });
   handler.postDelayed(new PrepareThingZTask(), 3000);
}

class PrepareThingZTask() implements Runnable {
   ....
}

一个很好的提醒,处理程序执行的runnable可以在UIThread中执行,所以没有繁重的工作,或者创建一个不同的looper来运行它。

此致