public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.rollDice:
Random ranNum = new Random();
int number = ranNum.nextInt(6) + 1;
diceNum.setText(""+number);
sum = sum + number;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
int value =(Integer)buttons[i][j].getTag();
if(value==sum){
inew=i;
jnew=j;
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
//I want to insert a delay here
buttons[inew][jnew].setBackgroundColor(Color.WHITE);
break;
}
}
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在更改背景之间设置命令之间的延迟.我尝试使用线程计时器并尝试使用run和catch.但它没有用.我试过这个
Thread timer = new Thread() {
public void run(){
try {
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
timer.start();
buttons[inew][jnew].setBackgroundColor(Color.WHITE);
Run Code Online (Sandbox Code Playgroud)
但它只会变成黑色.
Tua*_* Vu 460
试试这段代码:
import android.os.Handler;
...
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 5s = 5000ms
buttons[inew][jnew].setBackgroundColor(Color.BLACK);
}
}, 5000);
Run Code Online (Sandbox Code Playgroud)
Suf*_*ori 33
您可以使用CountDownTimer哪个比发布的任何其他解决方案更有效.您还可以使用其onTick(long)方法在整个过程中定期发出通知
看看这个显示30秒倒计时的例子
new CountDownTimer(30000, 1000) {
public void onFinish() {
// When timer is finished
// Execute your code here
}
public void onTick(long millisUntilFinished) {
// millisUntilFinished The amount of time until finished.
}
}.start();
Run Code Online (Sandbox Code Playgroud)
aru*_*uke 22
如果您经常在应用中使用延迟,请使用此实用程序类
import android.os.Handler;
public class Utils {
// Delay mechanism
public interface DelayCallback{
void afterDelay();
}
public static void delay(int secs, final DelayCallback delayCallback){
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
delayCallback.afterDelay();
}
}, secs * 1000); // afterDelay will be executed after (secs*1000) milliseconds.
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
// Call this method directly from java file
int secs = 2; // Delay in seconds
Utils.delay(secs, new Utils.DelayCallback() {
@Override
public void afterDelay() {
// Do something after delay
}
});
Run Code Online (Sandbox Code Playgroud)
如果您想按固定的时间间隔在UI中执行某项操作,非常好的选择是使用CountDownTimer:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
Run Code Online (Sandbox Code Playgroud)
你可以使用这个:
import java.util.Timer;
Run Code Online (Sandbox Code Playgroud)
对于延迟本身,添加:
new Timer().schedule(
new TimerTask(){
@Override
public void run(){
//if you need some code to run when the delay expires
}
}, delay);
Run Code Online (Sandbox Code Playgroud)
其中delay变量以毫秒为单位;例如,设置delay为 5000 表示 5 秒延迟。
Kotlin 中的处理程序答案:
1 - 在文件内创建一个顶级函数(例如包含所有顶级函数的文件):
fun delayFunction(function: ()-> Unit, delay: Long) {
Handler().postDelayed(function, delay)
}
Run Code Online (Sandbox Code Playgroud)
2 - 然后在您需要的任何地方调用它:
delayFunction({ myDelayedFunction() }, 300)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
283725 次 |
| 最近记录: |