java - 如何在同一函数的两次调用之间正确等待一段时间?
问题描述
所以我一直试图在每次我想使用“setText”写一条新消息之间暂停两秒钟。
public void startNewGame() throws InterruptedException {
welcomeMessage("Welcome.");
if (!seenTutorial) {
seenTutorial = true;
welcomeMessage("This is the first message.");
welcomeMessage("This is the second message.");
welcomeMessage("This is the third message.");
}
}
public void welcomeMessage(String message) throws InterruptedException {
welcomeText.setAlpha(0f);
welcomeText.setText(message);
welcomeText.animate().setDuration(2000).alpha(1.0f);
}
我试过等待(2000),但程序崩溃了。
还尝试用以下内容包围welcomeMessage方法的内容:
public void welcomeMessage(String message) throws InterruptedException {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
welcomeText.setAlpha(0f);
welcomeText.setText(message);
welcomeText.animate().setDuration(2000).alpha(1.0f);
}
}, 2000); //2 seconds
}
这样,只有最后一条消息“这是第三条消息”。会出现。我究竟做错了什么?
解决方案
在该welcomeMessage
方法中,Handler
每次发布一个r
Runnable
计划在创建的同一线程上延迟运行的 a 时,您都会创建新的Handler
。
所以发生的事情是这 3 个可运行文件都将在您的 2000 毫秒后运行,这就是为什么您只看到第三个可运行文件的效果。所以是的,你可以用不同的延迟来安排它们(所以它们之间存在时间间隔),即 2000、4000、6000。
public void welcomeMessage(String message, int delay) throws InterruptedException {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
welcomeText.setAlpha(0f);
welcomeText.setText(message);
welcomeText.animate().setDuration(2000).alpha(1.0f);
}
}, delay);
}
showMessage("hello", 2000);
showMessage("lets play the game", 4000);
推荐阅读
- windows - 如何让 jupyter 默认在当前目录启动(在 cmd.exe 中)?
- regex - 如何使用正则表达式按 id 获取项目过滤器?
- ionic-framework - Ionic v1 使用 webpack 代替 gulp
- java - Spring Security:无法在前端进行身份验证
- sql - 如何在我的代码中修复这个不正确的语法
- sorting - 性能:使用排序实现对切片进行排序与(切片的)排序类型
- python-3.x - Matplotlib,添加另一个轴
- xamarin.forms - Android Xamarin.Forms 应用程序能否访问 Windows 文件系统
- javascript - 无法通过子函数调用从数据库中检索 Nodejs MySQl 数据
- php - 错误:- 未定义的变量:原始而在 2 页之间传输数据