Countdowntimer in minutes and seconds

This is a countdown timer, and I want to print in minutes and seconds. ex (300000mili) 5 minutes, and the score is 4:60, 4:59 ... that's part of my code

final MyCounter timer = new MyCounter(300000,1000); blue.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { timer.start(); } }); } public class MyCounter extends CountDownTimer{ public MyCounter(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() { blue.setText("Live"); } @Override public void onTick(long millisUntilFinished) { blue.setText((millisUntilFinished/60000)+":"+(millisUntilFinished/5000)); // i tried this } } 

And how can I vibrate when not enough 20 seconds? and when did he finish? thanks and sorry for my bad english

+6
source share
3 answers

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

 TextView _tv = (TextView) findViewById( R.id.textView1 ); new CountDownTimer(30000, 1000) { // adjust the milli seconds here public void onTick(long millisUntilFinished) { _tv.setText(""+String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished), TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); } public void onFinish() { _tv.setText("done!"); } }.start(); 

Since java 1.5 is the java.util.concurrent.TimeUnit class

  _tv.setText(""+String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished), TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html

TimeUnit represents the length of time in a given drilldown unit and provides utility methods for converting between units and for performing synchronization and delay operations in these units.

For Java versions below 1.5 or for systems that do not fully support the TimeUnit class, the following equations can be used:

 int seconds = (int) (milliseconds / 1000) % 60 ; int minutes = (int) ((milliseconds / (1000*60)) % 60); int hours = (int) ((milliseconds / (1000*60*60)) % 24); 

To vibrate

  Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 500 milliseconds v.vibrate(500); <uses-permission android:name="android.permission.VIBRATE"/> // permission in manifest 

Edit:

Vibrate after 4 minutes 55 seconds for 500 milliseconds

  if((TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished)==4) && TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))==55) { Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 500 milliseconds v.vibrate(500); } 
+36
source

Just use the modulo % operator to get the remaining milliseconds and divide it by 1000 to convert to seconds.

 blue.setText((millisUntilFinished / 60000)+":"+(millisUntilFinished % 60000 / 1000)); 
+2
source
 package com.zt.voicerecorder.controller; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import com.zt.voicerecorder.R; public class MainActivity extends AppCompatActivity { private TextView tvTimer; private Handler handler = new Handler(); private Runnable runnable; private long milliSeconds = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvTimer = (TextView) findViewById(R.id.tvTimer); timerStart(); } private void timerStart() { runnable = new Runnable() { @Override public void run() { handler.postDelayed(this, 1000); milliSeconds = milliSeconds + 1000; int hours = (int) ((milliSeconds / (1000 * 60 * 60)) % 24); int minutes = (int) ((milliSeconds / (1000 * 60)) % 60); int seconds = (int) (milliSeconds / 1000) % 60; tvTimer.setText(String.format("%02d", hours) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds)); } }; handler.postDelayed(runnable, 0); } @Override protected void onDestroy() { handler.removeCallbacks(runnable); super.onDestroy(); } } 
+2
source

Source: https://habr.com/ru/post/949329/


All Articles