To create a stopwatch app for android, we can use android Chronometer. Here we will create a simple Stopwatch with an START/STOP button and a PAUSE/RESUME button.
Step 1: Create a new project with name StopWatch and package name com.myexample.stopwatch. Select File/New/New Project. Fill the forms and click “Finish” button.
Step 2: Open res/layout/xml (or) main.xml and add following code. Here we will create a Chronometer and two Buttons in a LinearLayout.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:padding="10dp" android:orientation="vertical"> <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="50sp" android:textColor="#FB1F11" android:id="@+id/mainChronometer1"/> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="START" android:id="@+id/mainButton1"/> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="PAUSE" android:id="@+id/mainButton2"/> </LinearLayout>
Step 3: Open app/src/main/java/package and open MainActivity.java. Add following code in it. Here when button1 is clicked, we will start the Chronometer, and when clicked again we will stop the Chronometer. And when button2 is clicked we will pause the Chronometer if it is running and resume it if it is paused.
package com.myexample.stopwatch; import android.app.*; import android.os.*; import android.widget.*; import android.view.*; public class MainActivity extends Activity { // Declare Chronometer, and two buttons private Chronometer stopclock; private Button button1; private Button button2; // Define an int for different modes private int BASE = 0; private int RUNNING = 1; private int STOPPED = 2; private int PAUSED = 3; private int mode = BASE; // timeWhenStopped will be added to current base time when we resume the paused chronometer long timeWhenStopped = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Define the buttons and chronometer from the views in xml file stopclock = findViewById(R.id.mainChronometer1); button1 = findViewById(R.id.mainButton1); button2 = findViewById(R.id.mainButton2); // Make PAUSE button INVISIBLE button2.setVisibility(View.INVISIBLE); button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ // If mode is BASE, start the chronometer and set mode to RUNNING if (mode == BASE){ stopclock.setBase(SystemClock.elapsedRealtime()); stopclock.start(); mode = RUNNING; button1.setText("STOP"); button2.setVisibility(View.VISIBLE); button2.setText("PAUSE"); } else if (mode == RUNNING||mode == PAUSED){ // If mode is RUNNING or PAUSED, stop the chronometer and set mode to STOPPED stopclock.stop(); mode = STOPPED; button1.setText("RESET"); button2.setVisibility(View.INVISIBLE); } else if (mode == STOPPED){ // If mode is STOPPED, reset chronometer and set mode to BASE mode = BASE; stopclock.setBase(SystemClock.elapsedRealtime()); timeWhenStopped = 0; button1.setText("START"); } } }); button2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ // If mode is RUNNING, stop the chronometer, set current chronometer reading as timeWhenStopped, // Set mode to PAUSED if (mode == RUNNING){ timeWhenStopped = stopclock.getBase() - SystemClock.elapsedRealtime(); stopclock.stop(); mode = PAUSED; button2.setText("RESUME"); } else if (mode == PAUSED){ // If mode is PAUSED, add timeWhenStopped to current time and set it as base of chronometer // Start the chronometer and set mode to RUNNING stopclock.setBase(SystemClock.elapsedRealtime() + timeWhenStopped); stopclock.start(); mode = RUNNING; button2.setText("PAUSE"); } } }); } }
Output:
Now run the app. The Stopwatch App is ready. Initially it displays only START/STOP button. When started, it displays the PAUSE/RESUME button.