如何在 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 中执行,因此无需对其进行繁重的工作,或者为 运行 创建一个不同的循环程序。
此致
我正在开发百叶窗应用程序。
我有 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 中执行,因此无需对其进行繁重的工作,或者为 运行 创建一个不同的循环程序。
此致