카테고리 없음

안드로이드를 이용한 StopWatch 만들기

만년필석사 2016. 8. 28. 16:40
반응형

이번시간엔 안드로이드를 이용한 StopWatch를 만들어 보려고한다. 


1. activity_main.xml 코드


뭐 대강 이런식으로 디자인해보았다. 배경화면 같은 경우는 내가 직접 넣은것이다. 코드는 다음과 같다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:contextClickable="true">

<TextView
android:id="@+id/time_out"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="40sp"
android:background="#cccccc"
android:textColor="#777777"
android:text="00:00:00" />

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="기록"
android:gravity="center"
android:background="#333333"
android:textColor="#ffffff"
/>

<TextView
android:id="@+id/record"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:textSize="20sp"
android:padding="10dp"
android:background="@android:drawable/presence_away" />

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/btn_start"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myOnClick"
android:text="시작"
/>
<Button
android:id="@+id/btn_rec"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="myOnClick"
android:text="기록"
android:enabled="false"

/>
</LinearLayout>

</LinearLayout>


대강 이런식의 코드이다. 


2. Main_activity.java 코드


package com.example.gunjoolee.stopwatch;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
TextView myOutput;
TextView myRec;
Button myBtnStart;
Button myBtnRec;

final static int Init =0;
final static int Run =1;
final static int Pause =2;

int cur_Status = Init; //현재의 상태를 저장할변수를 초기화함.
int myCount=1;
long myBaseTime;
long myPauseTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

myOutput = (TextView) findViewById(R.id.time_out);
myRec = (TextView) findViewById(R.id.record);
myBtnStart = (Button) findViewById(R.id.btn_start);
myBtnRec = (Button) findViewById(R.id.btn_rec);




}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}

public void myOnClick(View v){
switch(v.getId()){
case R.id.btn_start: //시작버튼을 클릭했을때 현재 상태값에 따라 다른 동작을 할수있게끔 구현.
switch(cur_Status){
case Init:
myBaseTime = SystemClock.elapsedRealtime();
System.out.println(myBaseTime);
//myTimer이라는 핸들러를 빈 메세지를 보내서 호출
myTimer.sendEmptyMessage(0);
myBtnStart.setText("멈춤"); //버튼의 문자"시작"을 "멈춤"으로 변경
myBtnRec.setEnabled(true); //기록버튼 활성
cur_Status = Run; //현재상태를 런상태로 변경
break;
case Run:
myTimer.removeMessages(0); //핸들러 메세지 제거
myPauseTime = SystemClock.elapsedRealtime();
myBtnStart.setText("시작");
myBtnRec.setText("리셋");
cur_Status = Pause;
break;
case Pause:
long now = SystemClock.elapsedRealtime();
myTimer.sendEmptyMessage(0);
myBaseTime += (now- myPauseTime);
myBtnStart.setText("멈춤");
myBtnRec.setText("기록");
cur_Status = Run;
break;


}
break;
case R.id.btn_rec:
switch(cur_Status){
case Run:

String str = myRec.getText().toString();
str += String.format("%d. %s\n",myCount,getTimeOut());
myRec.setText(str);
myCount++; //카운트 증가

break;
case Pause:
//핸들러를 멈춤
myTimer.removeMessages(0);

myBtnStart.setText("시작");
myBtnRec.setText("기록");
myOutput.setText("00:00:00");

cur_Status = Init;
myCount = 1;
myRec.setText("");
myBtnRec.setEnabled(false);
break;


}
break;

}
}

Handler myTimer = new Handler(){
public void handleMessage(Message msg){
myOutput.setText(getTimeOut());

//sendEmptyMessage 는 비어있는 메세지를 Handler 에게 전송하는겁니다.
myTimer.sendEmptyMessage(0);
}
};
//현재시간을 계속 구해서 출력하는 메소드
String getTimeOut(){
long now = SystemClock.elapsedRealtime(); //애플리케이션이 실행되고나서 실제로 경과된 시간
long outTime = now - myBaseTime;
String easy_outTime = String.format("%02d:%02d:%02d", outTime/1000 / 60, (outTime/1000)%60,(outTime%1000)/10);
return easy_outTime;

}


}

<출저: Javaking :: 자바킹- IT 정복>

대강 코딩해보면 이렇게 나온다. 중간중간 바꾼것도 몇개 있기는 하다. 

3. 실행화면

저렇게 코딩을 완벽히 하고 지니모션을 실행시키면 다음과 같다.

시작하고 기록하고 멈춤하고 아주 잘 실행이 되고있다. 예전부터 한번 만들어보고 싶은 어플이었는데 만들어서 좋았다. 여러 안드로이드 책에도 예제 나온게 많은걸로 알고있는데 다 해봐도 실력 금방 늘것이다.

카테고리 레이어 열고 닫기


반응형