본문 바로가기

Android

[8일차] 핸들러카운트다운 실습

핸들러 카운트다운 실습




package com.chapark.samplehandler;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class CountDownActivity extends AppCompatActivity {

TextView countView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_count_down);
countView = (TextView)findViewById(R.id.text_count);
Button btn = (Button)findViewById(R.id.btn_start);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// count = 10;
startTime = -1;
mHandler.removeCallbacks(downRunnable);
mHandler.post(downRunnable);
}
});
}

int count = 10;
Handler mHandler = new Handler(Looper.getMainLooper());

long startTime = -1;

Runnable downRunnable = new Runnable() {
@Override
public void run() {
// if (count >= 0) {
// countView.setText("count : " + count);
// count--;
// mHandler.postDelayed(this, 1000);
// } else {
// countView.setText("done");
// }
long time = SystemClock.elapsedRealtime();// 시스템의 리얼 타임을 얻어 온다.
if (startTime == -1) { //이건 startTime이 초기화 되지 않은 상태이다.
startTime = time;
}
int gap = (int)(time - startTime); // 리얼으로 처리되는 시간에서 startTime을 뺀다.
int count = 10 - gap / 1000; // 시스템적으로 10초 시간을 계산한다.
int rest = 1000 - (gap % 1000);// gap을 1000으로 나눈 나머지를 1초 만큼 빼서, 완벽한 딜레이를 맞춘다.
if (count >= 0) {
countView.setText("count : " + count);
mHandler.postDelayed(this, rest);
} else {
countView.setText("done");
}
}
};
}


'Android' 카테고리의 다른 글

[9일차]Property Animation, ObjectAnimation  (0) 2016.07.25
[8일차] 애니메이션  (0) 2016.07.22
[8일차] Handler Timeout 활용  (0) 2016.07.22
[8일차] AsncTask  (0) 2016.07.22
[8일차]핸들러 다루기  (0) 2016.07.22