186
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 と 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);

しかし、それは黒に変わるだけです。

4

9 に答える 9

572

このコードを試してください:

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);
于 2013-04-08T08:06:55.713 に答える
46

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();
于 2015-01-27T11:30:00.060 に答える
26

アプリで遅延を頻繁に使用する場合は、このユーティリティ クラスを使用します

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.
    }
}

使用法:

// 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

    }
});
于 2016-03-19T19:01:56.460 に答える
22

メソッドを使用しThread.sleep(millis)ます。

于 2013-04-11T13:25:35.533 に答える
5

Kotlin でのハンドラーの回答:

1 -ファイル内に最上位関数を作成します (たとえば、すべての最上位関数を含むファイル)。

fun delayFunction(function: ()-> Unit, delay: Long) {
    Handler().postDelayed(function, delay)
}

2 - 次に、必要な場所で呼び出します。

delayFunction({ myDelayedFunction() }, 300)
于 2018-10-02T06:53:41.887 に答える
4

これを使用できます:

import java.util.Timer;

遅延自体については、次を追加します。

 new Timer().schedule(
                    new TimerTask(){
                
                        @Override
                        public void run(){
                            
                        //if you need some code to run when the delay expires
                        }
                        
                    }, delay);

delay変数はミリ秒単位です。たとえばdelay、5 秒の遅延の場合は 5000 に設定します。

于 2018-08-07T20:47:36.433 に答える