프로그래밍/안드로이드

안드로이드 - 크로노미터를 이용한 스톱와치 만들기

가카리 2015. 8. 9. 17:25
반응형

 

Chronometer는 경과 시간을 측정하는 위젯이다. 즉 스톱워치를 만들수 있다는 뜻인데 0.x초는 안되고 1초단위로만 되기 때문에 약간 불편한 감이 있다.

 

void setBase(long base)

 

이 메소드의 인수는 부팅 후의 경과 시간을 전달하는데 보통 elapsedRealtime 메소드로 경과 시간을 전달한다.

 

start 메소드는 시간 갱신을 시작하고 stop 메소드는 시간 갱신을 중지한다. 그리고 앱이 종료되기전에 반드시 stop을 해줘야 메모리leak이 발생하지 않는다.

 

xml파일은 맨 위에 chronometer를 배치하고 버튼 3개를 배치하였다. 여기서 format="경과시간=%s" 라 되어 있는 부분에서 %s가 실제로 스톱워치가 표시되는 부분이다.(H:MM:SS 형태)

acitivity_chronometer_test.xml파일

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

    android:orientation="vertical"

>

 

<Chronometer

android:id="@+id/chrono"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:format="경과시간=%s"

android:textSize="30sp"

/>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

>

<Button

android:id="@+id/btnstart"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Start"

/>

<Button

android:id="@+id/btnstop"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Stop"

/>

<Button

android:id="@+id/btnreset"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Reset"

/>

</LinearLayout>

</LinearLayout>

 

ChronometerTest.java

 

package com.example.ch13_chronometer;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.SystemClock;

import android.view.View;

import android.widget.Chronometer;

 

public class ChronometerTest extends Activity {

    Chronometer mChrono;

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_chronometer_test);

        

        mChrono = (Chronometer)findViewById(R.id.chrono);

    }

 

    //반드시 종료전에 STOP 메소드를 호출해야 메모리릭이 발생하지 않는다.

    public void onDestroy(){

        super.onDestroy();

        mChrono.stop();

    }

    

    public void mOnClick(View v){

        //어느 버튼을 클릭했는지 확인

        switch(v.getId()){

        //start버튼의 경우

        case R.id.btnstart:

            mChrono.start();

            break;

        //stop버튼의 경우

        case R.id.btnstop:

            mChrono.stop();

            break;

        //reset버튼의 경우 다시 setBase 시켜줌.

        case R.id.btnreset:

            mChrono.setBase(SystemClock.elapsedRealtime());

            break;

        }

    }

    

}

 

 

실행 화면

아래화면은 start버튼을 누르고 2분 40초가 지난 시점이다.