반응형
지난 시간 포스팅에 이어
오늘은 타이머 정지 기능을 만들어 보겠습니다. 완성된 영상의 모습은 하기와 같습니다.
지난 시간 기본 소스에 추가토록 하겠습니다.
하기 처럼 UI 및 핸들러 인스턴스 변수 만듭니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// UI 인스턴스 변수 생성
button = (Button)findViewById(R.id.button);
button2 = (Button)findViewById(R.id.button2);
textView = (TextView)findViewById(R.id.textView);
// 타이머를 위한 핸들러 인스턴스 변수 생성.
timer = new TimerHandler();
}
|
시작/일시 정지 버튼 함수를 구현합니다.
타이머 구현을 위한 핸들러 내용은 이전 포스팅을 참고 바랍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public void onStartPauseButton(View view){
// 타이머 시작!
if(status == 0) // 정지 상태 라면, 재 시작.
{
status = 1;
timer.sendEmptyMessage(0);
button.setText("일시정지");
}else if(status == 1){ // 타이머 동작 중이라면, 일시 정지 시키기
status = 0;
// 1번 메시지를 던진다.
timer.sendEmptyMessage(1);
button.setText("시작");
}
}
|
cs |
정지 버튼을 위한 함수를 구현합니다.
메시지 2번 값을 만들어서 메시지를 안드로이드 OS에게 던지고 있죠.
1
2
3
4
5
|
public void onStop(View view){
status = 0;
timer.sendEmptyMessage(2);
}
|
cs |
가장 중요한 핸들러 클래스 입니다.
handleMessage() 함수 내에 msg.what 2번 동작을 하기 처럼 구현 했습니다.
0 번 타이머 반복 메시지를 큐에서 삭제하고, 버튼 텍스트를 업데이트 해줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
// 타이머 핸들러 클래스.
class TimerHandler extends Handler{
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0: // 시작 하기
if (timerTime == 0) {
textView.setText("Timer : " + timerTime);
removeMessages(0);
break;
}
// Main Thread 가 쉴때 Main Thread 가 실행하기에
// 오래걸리는 작업은 하면 안된다. (무한 루프 문 etc.. 은 쓰레드로)
textView.setText("Timer : " + timerTime--);
sendEmptyMessageDelayed(0, 1000);
Log.d("test", "msg.what:0 time = " + timerTime);
break;
case 1: //일시 정지
removeMessages(0); // 타이머 메시지 삭제
textView.setText("Timer : " + timerTime); // 현재 시간을 표시.
Log.d("test" , "msg.what:1 time = " + timerTime);
break;
case 2: // 정지 후 타이머 초기화
removeMessages(0); // 타이머 메시지 삭제
timerTime = 30; // 타이머 초기화
textView.setText("Timer : " + timerTime);
button.setText("시작");
Log.d("test" , "msg.what:1 time = " + timerTime);
break;
}
}
}
|
cs |
이상으로 안드로이드에서
핸들러를 활용한 타이머 기능을 구현해보았습니다.
더불어, 시작+일시정지+정지(초기화) 도 만들어 보았네요.
1강, 2강 포스팅을 활용하셔서
여러분 각자에 맞게 구현하시면 더 좋은 기능으로 탄생할 거 같습니다.
감사합니다. :)
[전체 소스는 하기 포스팅을 참고드립니다.]
반응형
'앱 만들기 > 안드로이드 study' 카테고리의 다른 글
자바의 기술 # instanceof 사용방법. (2) | 2020.09.06 |
---|---|
안드로이드의 기술 # android.content.res.Resources$NotFoundException: String resource ID # 에러 가 날때 (4) | 2020.09.04 |
안드로이드의 기술 # Handler 타이머 구현하기 (2) | 2020.09.02 |
안드로이드의 기술 # HashMap 에서 데이터 가져오기 (4) | 2020.08.30 |
안드로이드의 기술 # String array 리소스 접근하기 (6) | 2020.08.29 |
댓글