it-swarm.com.de

Wie kann ich die Verzögerung in Android einstellen?

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;

        }
    }

Ich möchte eine Verzögerung zwischen dem Befehl zwischen dem Hintergrundwechsel einstellen. Ich habe es mit einem Thread-Timer versucht und mit Run und Catch versucht. Aber es funktioniert nicht. Ich habe es versucht

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

Aber es wird nur noch schwarz.

136

Versuchen Sie diesen Code:

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);
415
Tuan Vu

Sie können CountDownTimer verwenden, das viel effizienter ist als jede andere Lösung, die veröffentlicht wird. Sie können auch regelmäßige Benachrichtigungen zu Intervallen erstellen, indem Sie die Methode onTick(long) verwenden

Schauen Sie sich dieses Beispiel an, das einen Countdown von 30 Sekunden zeigt

   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();
31
Sufiyan Ghori

Wenn Sie delay häufig in Ihrer App verwenden, verwenden Sie diese Dienstprogrammklasse

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

Verwendungszweck:

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

    }
});
21
aruke

Verwenden der Thread.sleep(millis) -Methode.

15
user2270457

Wenn Sie in regelmäßigen Abständen in der Benutzeroberfläche etwas tun möchten, ist CountDownTimer eine sehr gute Option:

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();
3
Ivo Stoyanov

sie können dies verwenden:

import Java.util.Timer;

und für die Verzögerung selbst hinzufügen:

 new Timer().schedule(
                    new TimerTask(){

                        @Override
                        public void run(){

                        //if you need some code to run when the delay expires
                        }

                    }, delay);

Die Variable "delay" steht für Millisekunden, zum Beispiel für eine Verzögerung von 5 Sekunden für eine Verzögerung von 5000

2
Dror

Handler-Antwort in Kotlin:

1 - Erstellen Sie eine Top-Level-Funktion innerhalb einer Datei (zum Beispiel eine Datei, die alle Ihre Top-Level-Funktionen enthält):

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

2 - Dann rufen Sie es an, wo Sie es brauchen:

delayFunction({ myDelayedFunction() }, 300)
1
Phil

Hier ein Beispiel, bei dem ich das Hintergrundbild mit einer 2-Sekunden-Alpha-Fade-Verzögerung in beide Richtungen von einem zum anderen umwandle - 2s-Ausblenden des Originalbilds in einen 2s-Fadein im 2. Bild.

    public void fadeImageFunction(View view) {

    backgroundImage = (ImageView) findViewById(R.id.imageViewBackground);
    backgroundImage.animate().alpha(0f).setDuration(2000);

    // A new thread with a 2-second delay before changing the background image
    new Timer().schedule(
            new TimerTask(){
                @Override
                public void run(){
                    // you cannot touch the UI from another thread. This thread now calls a function on the main thread
                    changeBackgroundImage();
                }
            }, 2000);
   }

// this function runs on the main ui thread
private void changeBackgroundImage(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            backgroundImage = (ImageView) findViewById(R.id.imageViewBackground);
            backgroundImage.setImageResource(R.drawable.supes);
            backgroundImage.animate().alpha(1f).setDuration(2000);
        }
    });
}
0
MuharizJ