我正在开发百叶窗应用程序。
我有4个屏幕大小的按钮(重叠)。程序一个按钮的每一步都是可点击的,每个按钮都有多个作业。
我的程序以语音(Android TTS引擎)开头。喜欢“请触摸屏做x”。在这一步之后,我想等待按钮点击3秒,如果没有点击按钮发声“请触摸屏做y”并再次等待3秒作业y。 (x和y是第一个按钮的工作)。
按钮应根据触摸屏执行其中一个操作。但是,我如何等待按钮3秒钟并继续发出下一个选项并再次等待3秒钟。
如果单击第一个按钮,它将消失 - 按钮2将被点击 - 并且TTS引擎将开始发声第二个按钮选项。应用程序将是这样的工作,但我陷入等待按钮点击部分。
答案 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来运行它。
此致