0

I am developing an Android Application that displays a android.widget.Chronometer timer.

As this is a sports related application I need the timer to show 90 minutes as 90:00 and NOT 01:30:00.

Is my only option to create a custom Chronometer?

Hector
  • 4,016
  • 21
  • 112
  • 211
  • 3
    When in doubt check the source: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/Chronometer.java From the looks of it, as 90:00 isn't a valid Java datetime format you'll need to go custom. – Morrison Chang Oct 19 '16 at 17:58

1 Answers1

1

Define instances of the controls

Chronometer chrono;
Button btnStart;
Button btnStop;
TextView txt;

And some variables

long elapsedTime=0;
String currentTime="";
long startTime=SystemClock.elapsedRealtime();
Boolean resume=false;

the Boolean flag differentiate between starting the Chronometer for the first time or resuming it after pause

Now to handle each button click event

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
chrono=(Chronometer)findViewById(R.id.chrono);
btnStart=(Button)findViewById(R.id.btnStart);
btnStop=(Button)findViewById(R.id.btnStop);
btnReset=(Button)findViewById(R.id.btnReset);
txt=(TextView)findViewById(R.id.txt);

public void onClick(View v) {
  // TODO Auto-generated method stub
  switch(v.getId())
  {
  case R.id.btnStart:
   btnStart.setEnabled(false);
   btnStop.setEnabled(true);
   if(!resume)
   {
    chrono.setBase(SystemClock.elapsedRealtime());
    chrono.start();
   }
   else
   {

    chrono.start();
   }

   break;
  case R.id.btnStop:
   btnStart.setEnabled(true);
   btnStop.setEnabled(false);
   chrono.stop();
   chrono.setText(currentTime);
   resume=true;
   btnStart.setText("Resume");
   break;
  case R.id.btnReset:

   chrono.stop();
   chrono.setText("00:00");
   resume=false;
   btnStop.setEnabled(false);
   break;
  }
 }


chrono.setOnChronometerTickListener(new OnChronometerTickListener()
        {

   public void onChronometerTick(Chronometer arg0) {
    // TODO Auto-generated method stub

    if(!resume)
    {

     long minutes=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)/60;
     long seconds=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)%60;
     currentTime=minutes+":"+seconds;
     arg0.setText(currentTime);
     elapsedTime=SystemClock.elapsedRealtime();
    }
    else
    {

     long minutes=((elapsedTime-chrono.getBase())/1000)/60;
     long seconds=((elapsedTime-chrono.getBase())/1000)%60;
     currentTime=minutes+":"+seconds;
     arg0.setText(currentTime);
     elapsedTime=elapsedTime+1000;
    }

The onChronometerTick method handles the Chronometer tick event which occurs every second

chrono.setOnChronometerTickListener(new OnChronometerTickListener()
        {

   public void onChronometerTick(Chronometer arg0) {
    // TODO Auto-generated method stub

    if(!resume)
    {

     long minutes=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)/60;
     long seconds=((SystemClock.elapsedRealtime()-chrono.getBase())/1000)%60;
     currentTime=minutes+":"+seconds;
     arg0.setText(currentTime);
     elapsedTime=SystemClock.elapsedRealtime();
    }
    else
    {

     long minutes=((elapsedTime-chrono.getBase())/1000)/60;
     long seconds=((elapsedTime-chrono.getBase())/1000)%60;
     currentTime=minutes+":"+seconds;
     arg0.setText(currentTime);
     elapsedTime=elapsedTime+1000;
    }
nzala
  • 374
  • 4
  • 10