2013-03-14 13 views
10

Sto cercando di sviluppare un conto alla rovescia in Android. In questo esempio inserisco un numero di minuti come parametro che viene mostrato in un timer per il conto alla rovescia.Timer conto alla rovescia in HH: MM: formato SS in Android

Il problema è che quando inserisco i minuti, ad esempio 65, , il contatore sarà 65:00. Vorrei che il contatore mostrasse 1:05:00 nel formato HH: MM: SS.

public class MainActivity extends Activity implements OnClickListener { 

private Button buttonStartTime, buttonStopTime; 
private EditText edtTimerValue; 
private TextView textViewShowTime; // will show the time 
private CountDownTimer countDownTimer; // built in android class 
             // CountDownTimer 
private long totalTimeCountInMilliseconds; // total count down time in 
              // milliseconds 
private long timeBlinkInMilliseconds; // start time of start blinking 
private boolean blink; // controls the blinking .. on and off 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    buttonStartTime = (Button) findViewById(R.id.btnStartTime); 
    buttonStopTime = (Button) findViewById(R.id.btnStopTime); 
    textViewShowTime = (TextView) findViewById(R.id.tvTimeCount); 
    edtTimerValue = (EditText) findViewById(R.id.edtTimerValue); 

    buttonStartTime.setOnClickListener(this); 
    buttonStopTime.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.btnStartTime) { 
     textViewShowTime.setTextAppearance(getApplicationContext(), 
       R.style.normalText); 
     setTimer(); 
     buttonStopTime.setVisibility(View.VISIBLE); 
     buttonStartTime.setVisibility(View.GONE); 
     edtTimerValue.setVisibility(View.GONE); 
     edtTimerValue.setText(""); 
     startTimer(); 

    } else if (v.getId() == R.id.btnStopTime) { 
     countDownTimer.cancel(); 
     buttonStartTime.setVisibility(View.VISIBLE); 
     buttonStopTime.setVisibility(View.GONE); 
     edtTimerValue.setVisibility(View.VISIBLE); 
    } 
} 

private void setTimer() { 
    int time = 0; 
    if (!edtTimerValue.getText().toString().equals("")) { 
     time = Integer.parseInt(edtTimerValue.getText().toString()); 
    } else 
     Toast.makeText(MainActivity.this, "Please Enter Minutes...", 
       Toast.LENGTH_LONG).show(); 

    totalTimeCountInMilliseconds = 60 * time * 1000; 

    timeBlinkInMilliseconds = 30 * 1000; 
} 

private void startTimer() { 
    countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) { 
     // 500 means, onTick function will be called at every 500 
     // milliseconds 

     @Override 
     public void onTick(long leftTimeInMilliseconds) { 
      long seconds = leftTimeInMilliseconds/1000; 

      if (leftTimeInMilliseconds < timeBlinkInMilliseconds) { 
       textViewShowTime.setTextAppearance(getApplicationContext(), 
         R.style.blinkText); 
       // change the style of the textview .. giving a red 
       // alert style 

       if (blink) { 
        textViewShowTime.setVisibility(View.VISIBLE); 
        // if blink is true, textview will be visible 
       } else { 
        textViewShowTime.setVisibility(View.INVISIBLE); 
       } 

       blink = !blink; // toggle the value of blink 
      } 

      textViewShowTime.setText(String.format("%02d", seconds/60) 
        + ":" + String.format("%02d", seconds % 60)); 
      // format the textview to show the easily readable format 

     } 

     @Override 
     public void onFinish() { 
      // this function will be called when the timecount is finished 
      textViewShowTime.setText("Time up!"); 
      textViewShowTime.setVisibility(View.VISIBLE); 
      buttonStartTime.setVisibility(View.VISIBLE); 
      buttonStopTime.setVisibility(View.GONE); 
      edtTimerValue.setVisibility(View.VISIBLE); 
     } 

    }.start(); 

} 
} 

risposta

43

Sto usando il codice qui sotto convertire da durata nel seconds al formato HH:MM:SS.

String.format("%02d:%02d:%02d", durationSeconds/3600, 
       (durationSeconds % 3600)/60, (durationSeconds % 60)); 

È possibile regolare facilmente questo ingresso per accettare in minutes ma poi l'output sarà nel formato HH:MM:00 in quanto non si dispone di secondi, ad esempio:

String.format("%02d:%02d:%02d", durationMinutes/60, durationMinutes % 60, 0); 
+4

amore u bro funziona per me thnks :) –

+0

Grazie mille. mi ha aiutato molto .. –

+0

Helpfull .. Grazie –

Problemi correlati