activity_nain.xml에서 위젯들의 id를 정할때 Extract Resource로 리소스 이름을 설정할수있다.
activity_nain.xml에서의 id 코드도 바뀌었다.
android:text="@string/timer_text"
res의 values안의 string.xml에서 확인할수있다.
<resources>
<string name="app_name">핑거 스피드 게임</string>
<string name="timer_text">남은시간</string>
</resources>
# 하드코딩이라고 한다.
이제 CountDownTimer로 타이머를 기능을 만들어보자.
TextView txtTimer;
TextView txtCount;
Button button;
// 타이머를 사용하기위한 멤버변수로 선언
CountDownTimer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtTimer = findViewById(R.id.txtTimer);
txtCount = findViewById(R.id.txtCount);
button = findViewById(R.id.button);
timer = new CountDownTimer(60000, 1000) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
}
}
}
시간 (ms단위)를 상수처리할수있다.
final int millisInFuture = 60000;
final int countDownInterval = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtTimer = findViewById(R.id.txtTimer);
txtCount = findViewById(R.id.txtCount);
button = findViewById(R.id.button);
timer = new CountDownTimer(millisInFuture, countDownInterval) //...
전체 코드는 아래와 같이 구성했다.
TextView txtTimer;
TextView txtCount;
Button button;
Button btnAgain;
// 타이머를 사용하기위한 멤버변수로 선언
CountDownTimer timer;
final int millisInFuture = 11000;
final int countDownInterval = 1000;
int count = 0;
boolean isFinished = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtTimer = findViewById(R.id.txtTimer);
txtCount = findViewById(R.id.txtCount);
button = findViewById(R.id.button);
btnAgain = findViewById(R.id.btnAgain);
timer = new CountDownTimer(millisInFuture, countDownInterval) {
@Override
public void onTick(long l) {
// 남은시간을 계산해서 텍스트뷰에 보여준다.
// Log.i("MyTimer", "남은시간 : " + l);
long remain = (int)l/1000;
// int remain = (int) l / 1000;
txtTimer.setText(""+remain);
if(remain == 5){
txtTimer.setTextColor(Color.RED);
}
}
@Override
public void onFinish() {
Log.i("MyTimer", "타이머 끝");
txtTimer.setText("타이머가 끝났습니다.");
txtTimer.setTextColor(Color.BLACK);
isFinished = true;
btnAgain.setVisibility(View.VISIBLE);
}
};
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isFinished == false){
count = count +1;
txtCount.setText("Tap : "+count);
}
}
});
btnAgain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
count = 0;
txtCount.setText("Tap : "+count);
txtTimer.setTextColor(Color.parseColor("#0017FF"));
isFinished = false;
timer.start();
btnAgain.setVisibility(View.INVISIBLE);
}
});
// 타이머를 시작해야 한다.
timer.start();
앱이 잘 실행된다.
'Android' 카테고리의 다른 글
[Android] 엑티비티(Activity): Intent (0) | 2022.07.13 |
---|---|
[Android] onBackPressed와 Alert Dialog(알림창) (0) | 2022.07.12 |
[Android] 문자열인지 아닌지 확인하는 코드 (0) | 2022.07.12 |
[Android] 오픈API 사용한 앱 만들기: 안드로이드 네트워크 통신, Volley, JSON 데이터 파싱, 스크롤뷰 (0) | 2022.07.11 |
[Android] 라이프 사이클(Life Cycle) (0) | 2022.07.11 |
댓글