【问题标题】:How to wait button clicks for a while in android如何在android中等待按钮点击一段时间
【发布时间】:2015-03-17 21:26:42
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

提醒一下,handler 执行的 runnable 可以在 UIThread 中执行,所以不需要繁重的工作,或者创建一个不同的 looper 来运行它。

问候

【讨论】:

    【解决方案2】:

    您可以通过忙碌的等待来解决您的问题。 因此,在您第一次发出“请触摸屏幕...”之后,您将启动一个等待特定时间的后台线程,如下所示:

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

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

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

    问候 我

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      相关资源
      最近更新 更多