마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

다운카운터를 만드는데...

0 추천
package com.example.countdowntimer;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
public class TimerActivity extends Activity implements OnClickListener {
 
public CountDownTimer countDownTimer;
public boolean timerHasStarted = false;
public Button startB;
public Button startA;
public TextView text;
public EditText et;
public String str;
public long startTime = 0;
public long st = 0;
public final long interval = 1 * 1000;
 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
startB = (Button) this.findViewById(R.id.button);
startA = (Button) this.findViewById(R.id.button1);
text = (TextView) this.findViewById(R.id.timer);
et = (EditText) this.findViewById(R.id.editText1);
startB.setOnClickListener(this);
 
 
startA.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
 
startTime = Long.parseLong(et.getText().toString())*1000;
text.setText(String.valueOf(startTime / 1000));
}
});
countDownTimer = new MyCountDownTimer(startTime, interval);
text.setText(text.getText() + String.valueOf(startTime / 1000));
}
 
@Override
public void onClick(View v) {
if (!timerHasStarted) {
 
 
countDownTimer.start();
timerHasStarted = true;
startB.setText("STOP");
} else {
countDownTimer.cancel();
timerHasStarted = false;
startB.setText("RESTART");
}
}
 
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
 
@Override
public void onFinish() {
text.setText("Time's up!");
}
 
@Override
public void onTick(long millisUntilFinished) {
text.setText("" + millisUntilFinished / 1000);
}
}
 
}
 
 
자바소스코드는 이렇습니다. 
 
제가 EditText로 시간(초)를 입력받아 그 시간동안 카운트 다운이 되는 타이머를 만들려고합니다.
 
근데 startTime의 변수에 상수를 넣어주면 잘 작동하는데 왜 EditText에서 받아오는 값을 넣으면 바로 Time's up이라는 메시지가 뜰까요...? 
 
startA.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
 
startTime = Long.parseLong(et.getText().toString())*1000;
text.setText(String.valueOf(startTime / 1000));
}
}); 
 
이부분이 EditText에서 값을 받아오는 부분이고
 
@Override
public void onTick(long millisUntilFinished) {
text.setText("" + millisUntilFinished / 1000);
}
 
이부분이 onTick 함수 입니다.. 제발 답변 부탁드려요 ,,,
 
 

 

익명사용자 님이 2013년 10월 31일 질문

1개의 답변

0 추천
버튼이벤트를 설정하면서 내부에 startTime값을 받아오는데...

 

이벤트가 발생하기 전에 이미 시간값을 타이머에 넣어버리네요...

타이머에 시간이 들아갈때는 0이므로 시작하자마자 Time's up이 뜨는것은 당연합니다.

 

버튼을 눌렀을때 시간을 넣어서 타이머를 생성하도록 변경하셔야 겠네요.
이라슈 (8,770 포인트) 님이 2013년 10월 31일 답변
네 감사합니다.

근데 조금 코드적으로 조언좀 얻을수 있을까요...?
countDownTimer = new MyCountDownTimer(startTime, interval);

이부분이 onClick 메소드 내부로 들어가야 한다는거죠
...