【问题标题】: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 线程制作这样的声音(取决于你如何播放文件/声音的方法)。
但是,这只是一个想法,我无法测试运行我的代码!
但我希望我能启发你!
问候
我