如何在 android 中等待按钮点击一段时间

How to wait button clicks for a while in android

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

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

我的程序以语音(Android TTS 引擎)开始。喜欢"please touch screen to do x"。在这一步之后,我想等待 3 秒按钮点击,如果没有点击按钮发声 "please touch screen to do y" 并再次等待 3 秒等待作业 y。 (x 和 y 是第一个按钮的工作)。

按钮应该根据触摸屏做其中之一。但是我怎么能等待 3 秒按钮点击并继续发出下一个选项并再次等待 3 秒。

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

忙等待可以解决您的问题。 因此,在您第一次发声 "please touch screen..." 之后,您将启动一个等待特定时间的后台线程,如下所示:

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

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

但是,这只是一个想法,我无法测试-运行我的代码! 但我希望我启发了你!

问候 我

我建议您改用 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 {
   ....
}

一个很好的提醒,由处理程序执行的 运行nable 可以在 UIThread 中执行,因此无需对其进行繁重的工作,或者为 运行 创建一个不同的循环程序。

此致