2013-07-05 6 views
4

Je veux afficher le minuteur dans TextView au format de [19:59] .so quand je clique sur le bouton de démarrage, la minuterie s'affichera comme ceci par exemple, je veux définir jusqu'à 20 minutes, il affichera comme [19:58] [19:87]. Est-ce que quelqu'un peut donner des idées ou un exemple de code? enter image description hereComment afficher la minuterie en android

+1

Avez-vous essayé quelque chose ?? – Krrishnaaaa

+0

Pouvez-vous nous montrer ce que vous avez? –

+0

la plupart des exemples d'étoiles avec l'heure de départ comme 1,2,3 secondes jusqu'à 60 secondes.je veux inverser l'ordre – rajeshlawrance

Répondre

11

Vous pouvez utiliser le CountDownTimer.

http://developer.android.com/reference/android/os/CountDownTimer.html

 TextView _tv = (TextView) findViewById(R.id.textView1); 
    new CountDownTimer(20*60000, 1000) { 

     public void onTick(long millisUntilFinished) { 
      _tv.setText("seconds remaining: " +new SimpleDateFormat("mm:ss:SS").format(new Date(millisUntilFinished))); 
     } 

     public void onFinish() { 
      _tv.setText("done!"); 
     } 
    }.start(); 

Pour annuler simplement appeler annuler la minuterie.

public final void cancel()

Annuler le compte à rebours.

+0

Est-ce que cela peut être utilisé pour faire un compte à rebours? c'est-à-dire à partir de 0 et va à l'infini – faizal

+0

Pourquoi est-ce 20 * 60000 –

+0

@RuchirBaronia le premier argument prend un long qui est millisecondes pour le test que j'ai utilisé cela. Vous pouvez le changer pour ce que vous voulez – Raghunandan

12
package com.example.testproject; 

import java.util.Timer; 
import java.util.TimerTask; 

import android.os.Bundle; 
import android.widget.TextView; 
import android.app.Activity; 

public class MainActivity extends Activity { 

    public int seconds = 60; 
    public int minutes = 10; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Declare the timer 
     Timer t = new Timer(); 
     //Set the schedule function and rate 
     t.scheduleAtFixedRate(new TimerTask() { 

      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         TextView tv = (TextView) findViewById(R.id.main_timer_text); 
         tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds)); 
         seconds -= 1; 

         if(seconds == 0) 
         { 
          tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds)); 

          seconds=60; 
          minutes=minutes-1; 

         } 



        } 

       }); 
      } 

     }, 0, 1000); 
    } 

} 
+0

c'est le code que j'ai essayé et j'ai eu la réponse avec ma propre logique – rajeshlawrance

+0

peu erreur: deuxième - = 1 doit être après if (secondes == 0) {...}, sinon la seconde de votre timer affichera 0 après 2 – Daryn

5
//start button click 
    CountDown timer = new CountDown(180000, 1000); 
    timer.start(); 

//stop button click 
timer.stop(); 

    //countdown class 
    public class CountDown extends CountDownTimer { 

      public CountDown(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
      long ms = millisUntilFinished; 
      String text = String.format("%02d\' %02d\"", 
             TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)), 
             TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms))); 
      textViewTimer.setText(text); 
      } 

      @Override 
      public void onFinish() { 
      textViewTimer.setText("ffinish"); 
      } 
     } 
0

Cela peut être fait en utilisant cronometer, la raison la plus principale soutient API 1+, ce qui est assez impressionnant plutôt que TextClock, qui prend en charge les API 17+.

Vous pouvez faire beaucoup d'autres choses avec le cronomètre. par exemple vous pouvez régler l'heure de début dans ce

chronometer.setBase (SystemClock.elapsedRealtime());

Vous pouvez en apprendre davantage sur plus here.

0

Ici j'utiliser la classe Timer pour afficher la minuterie

public class FourthActivity extends AppCompatActivity { 
    Button startButton, pauseButton; 
    TextView timerValue; 
    Timer timer; 
    int seconds = 0, minutes = 0, hour = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fourth); 
     bindView(); 

     timer = new Timer(); 
     startButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       timer.scheduleAtFixedRate(new TimerTask() { 
        @Override 
        public void run() { 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           if (seconds == 60) { 
            timerValue.setText(String.format("%02d", hour) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds)); 
            minutes = seconds/60; 
            seconds = seconds % 60; 
            hour = minutes/60; 
           } 
           seconds += 1; 
           timerValue.setText(String.format("%02d", hour) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds)); 
          } 
         }); 
        } 
       }, 0, 1000); 
      } 
     }); 
    } 

    private void bindView() { 
     timerValue = (TextView) findViewById(R.id.timerValue); 
     startButton = (Button) findViewById(R.id.startButton); 
    } 
} 

mise en page, il y a un TextView et un bouton pour démarrer la minuterie. J'ai utiliser la méthode de classe de temporisateur scheduleAtFixedRate. L'heure sera affichée sous la forme hh: mm: ss.