Android 文本视图中的倒计时
我写了这段代码,我想当我点击btnGetPincode时,一个60秒的倒计时开始运行。 但是它没有发生,结果在textview=00:00时,什么也没有发生。为什么? 这是我的代码:Android 文本视图中的倒计时,android,textview,countdowntimer,Android,Textview,Countdowntimer,我写了这段代码,我想当我点击btnGetPincode时,一个60秒的倒计时开始运行。 但是它没有发生,结果在textview=00:00时,什么也没有发生。为什么? 这是我的代码: btnGetPinCode.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { btnGetPinCode.setClickable(false); btnGe
btnGetPinCode.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
btnGetPinCode.setClickable(false);
btnGetPinCode.setBackgroundResource((R.drawable.button4));
txtShowPinCode.setVisibility(View.VISIBLE);
//initialize timer duration
long duration = TimeUnit.MINUTES.toMillis(1);
//initialize timer countdown timer
new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
, TimeUnit.MILLISECONDS.toMinutes(1)
, TimeUnit.MILLISECONDS.toSeconds(1) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(1)));
//set converted time to textView
txtTimer.setVisibility(View.VISIBLE);
txtTimer.setText(duration2+"");
btnOk.setText(duration2);
}
@Override
public void onFinish() {
//when timer finished, hide text view
txtTimer.setVisibility(View.INVISIBLE);
btnGetPinCode.setBackgroundResource(R.drawable.button);
btnGetPinCode.setClickable(true);
}
}.start();
});
}问题:您在
duration2
变量的每个参数中设置1
,因此文本视图永远不会更改,您需要设置每个计时器刻度上更改的实际值,这是onTick()
方法>millisuntillfinished
将计时器更改为:
new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //<<<<< change here
, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //<<<< change here
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here
//set converted time to textView
txtTimer.setVisibility(View.VISIBLE);
txtTimer.setText(duration2+"");
btnOk.setText(duration2);
}
@Override
public void onFinish() {
//when timer finished, hide text view
txtTimer.setVisibility(View.INVISIBLE);
btnGetPinCode.setBackgroundResource(R.drawable.button);
btnGetPinCode.setClickable(true);
}
}.start();
新倒计时(持续时间,1000){
@凌驾
公共void onTick(长毫秒未完成){
String duration2=String.format(Locale.ENGLISH,“%02d:%02d”
,TimeUnit.millides.toMinutes(millisuntiltfinished)/问题:您在duration2
变量的每个参数中设置1
,因此文本视图永远不会更改,您需要设置每个计时器刻度上更改的实际值,这是onTick()
方法>millisuntiltfinished
将计时器更改为:
new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //<<<<< change here
, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //<<<< change here
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here
//set converted time to textView
txtTimer.setVisibility(View.VISIBLE);
txtTimer.setText(duration2+"");
btnOk.setText(duration2);
}
@Override
public void onFinish() {
//when timer finished, hide text view
txtTimer.setVisibility(View.INVISIBLE);
btnGetPinCode.setBackgroundResource(R.drawable.button);
btnGetPinCode.setClickable(true);
}
}.start();
新倒计时(持续时间,1000){
@凌驾
公共void onTick(长毫秒未完成){
String duration2=String.format(Locale.ENGLISH,“%02d:%02d”
,TimeUnit.millides.toMinutes(millisuntiltfinished)/主要问题在于时间的计算duration2
//Declare timer
CountDownTimer cTimer = null;
cTimer = new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //Here is the problem
, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //Here is the problem
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here
//set converted time to textView
txtTimer.setVisibility(View.VISIBLE);
txtTimer.setText(duration2+"");
btnOk.setText(duration2);
}
@Override
public void onFinish() {
//when timer finished, hide text view
txtTimer.setVisibility(View.INVISIBLE);
btnGetPinCode.setBackgroundResource(R.drawable.button);
btnGetPinCode.setClickable(true);
}
}.start();
主要问题在于计算时间duration2
//Declare timer
CountDownTimer cTimer = null;
cTimer = new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //Here is the problem
, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //Here is the problem
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here
//set converted time to textView
txtTimer.setVisibility(View.VISIBLE);
txtTimer.setText(duration2+"");
btnOk.setText(duration2);
}
@Override
public void onFinish() {
//when timer finished, hide text view
txtTimer.setVisibility(View.INVISIBLE);
btnGetPinCode.setBackgroundResource(R.drawable.button);
btnGetPinCode.setClickable(true);
}
}.start();
是的,谢谢million@GhazalT75很高兴听到!如果你的问题是正确的,请接受答案。谢谢million@GhazalT75很高兴听到!如果你的问题是针对你的,请接受答案