Search code examples
androidwidgetchronometer

Can Android Chronometer show 90 minutes as 90:00 NOT 1:30:00


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?


Solution

  • 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;
        }