[안드로이드 어플 만들기] Chronometer 활용한 스톱워치 만들기(밀리초)
▣[안드로이드 어플 만들기] Chronometer 활용한 스톱워치 |
● 크로노메터는 기본적으로 [분:초] 단위만 표시를 하다가 한시간이 넘어가면 [시:분:초] 형태로 바뀌게 됩니다. 하지만 기본적으로는 밀리초(msec) 단위를 지원하지 않고 있는데요.
msec를 기능을 구현하는 방법을 알아보도록 하겠습니다.
● 스톱워치 예제인데요. 시작과 스톱은 토글버튼을 이용하고, 마킹과 초기화 버튼을 배치하고 있습니다. 프로젝트를 실행을 시키면 처음에는 밀리초 단위는 보이지 않다가 "시작" 버튼을 클릭하게 되면 나타나게 되고, 마킹 버튼을 클릭하면 아래쪽에 밀리초 까지 기록하게 됩니다. 초기화를 누르면 아래쪽 마킹 기록은 모두 삭제가 되고, 밀리초도 "0"으로 초기화가 됩니다.
● 먼저 레이아웃 배치를 합니다. 너무 밋밋해서 배경색을 추가한다고 한것이 좀 요란하게 출력이 되네요.;;
● xml 파일을 보면서 자세히 살펴보겠습니다.
크로노메터를 화면에 배치하고, 위치를 중앙으로 설정하고, 텍스트 사이즈를 "40dp"로 설정하고 있습니다. 밀리초를 출력할 텍스트뷰와 토글버튼, 마킹, 초기화 버튼까지 배치하고 있는 모습입니다.
● 다음으로 아래쪽으로 스크롤뷰를 넣어서 그 안에 LinearLayout을 배치하고 마킹을 기록하게 될 TextView를 추가합니다.
● 이제 메인액티비티 파일에서 각 버튼과 밀리초에 대한 코드를 작성해 보겠습니다.
먼저 크로노메터와 밀리초를 출력할 텍스트뷰, 마킹결과를 출력할 LinearLayout과 마킹의 번호를 출력할 num을 전역변수로 선언하고, 각각의 객체들을 호출해서 변수에 담고 있습니다.
● 다음은 각각의 버튼에 클릭이벤트를 작성하고 있는데요.
○ 첫번째로 토글버튼이 On 일때, 타이머가 '0"초부터 시작을 하고,Off일때 정지를 하며, 시작시간을 시스템의 현재 시간으로 초기화하고 있습니다.
○ 두번째 "마킹"버튼을 클릭하면 markRecord()메서드를 실행하도록 하고 있습니다. 이 메서드는 아래쪽에서 정의할 것입니다.
○ 세번째 버튼은 초기화 버튼인데요. 시작시간을 다시 '0'으초 초기화 하고, 마킹되어 있던 기록들을 모두 삭제하고, 마킹 번호를 다시 '1'로 초기화 하고 있습니다.
○ 밀리초를 출력할 첫번째 텍스트뷰를 공백(" ")으로 초기화를 하고 현재 시스템 시간과 크로노메터 시간의 차이를 구해서 msec를 구하는 TickListener(초침 리스너)를 정의하고 있습니다. (###,###)로 1000단위찍 구분하여 출력하는 텍스트뷰에 대입하고 있습니다.
○ 다음으로 마킹버튼을 클릭했을때 호출했던 markRecord()메서드를 작성합니다. "elapsedMillis"는 밀리초를 계산하고 있고, "seconds"는 초 단위 이상만 계산하도록 하고 있습니다. 텍스트뷰에 일련번호와 기본적으로 제공하는 [시:분:초]를 출력하고 뒤이어 msec를 추가하도록 하고 있으며, 스크롤뷰 안에 텍스트뷰를 추가하고 화면에 출력하도록 하고, 마킹번호를 '1'씩 증가시키고 있습니다.
● 실행화면을 살펴보겠습니다.
● 프로젝트를 실행하면 그림처럼 밀리초를 표시하는 부분은 공백으로 나타나게됩니다. 이때 시작버튼을 클릭하면 나타나게 되며, 마킹을 누르면 아래쪽의 스크롤뷰에 데이터가 출력이 됩니다.
● 초기화 버튼을 클릭하면 타이머는 '00:00'으로 , 밀리초는 '0'으로 초기화 되고, 마킹 데이터들은 모두 삭제됩니다.