CountDownTimer 奇怪的行为
CountDownTimer strange behaviour
大家好,提前致谢!,
我有一个 CountDownTimer,当我显示从 1 到给定数字的递增计数时,我想暂停一下,有一个间隔。问题是,使用下面的代码,计数器有时会达到 29,但有时只有 28,我不知道为什么。
有人能帮帮我吗?
public void CountDown(View v)
{
int FinishNumber = 30;
final CountDownTimer CountDown = new CountDownTimer(FinishNumber * 100, 100)
{
int NumberToShow = 1;
public void onTick(long millisUntilFinished)
{
CopyrightTV.setText(String.valueOf(NumberToShow++));
}
public void onFinish()
{
CopyrightTV.setText(String.valueOf(NumberToShow));
this.cancel();
}
}
.start();
}
这并不是什么奇怪的行为 - 考虑到第一个 onTick(long millisUntilFinished) 仅在 100 毫秒(即您设置的间隔)之后调用,而不是在您启动 CountDownTimer 时调用。
其次,CountDownTimer 不是 100% 精确的计时器,所以你可以期待这个 "strange behaviour"。
编辑
如果精度不是特别重要,你可以尝试将 CountDownTimer 增加几百毫秒,像这样:
public void CountDown(final TextView v)
{
final int FinishNumber = 30;
final CountDownTimer CountDown = new CountDownTimer((FinishNumber + 4) * 100, 100)
{
int NumberToShow = 1;
public void onTick(long millisUntilFinished)
{
if (NumberToShow < FinishNumber)
v.setText(String.valueOf(NumberToShow++));
}
public void onFinish()
{
if (NumberToShow < FinishNumber)
v.setText(String.valueOf(NumberToShow));
}
}
.start();
}
大家好,提前致谢!,
我有一个 CountDownTimer,当我显示从 1 到给定数字的递增计数时,我想暂停一下,有一个间隔。问题是,使用下面的代码,计数器有时会达到 29,但有时只有 28,我不知道为什么。
有人能帮帮我吗?
public void CountDown(View v)
{
int FinishNumber = 30;
final CountDownTimer CountDown = new CountDownTimer(FinishNumber * 100, 100)
{
int NumberToShow = 1;
public void onTick(long millisUntilFinished)
{
CopyrightTV.setText(String.valueOf(NumberToShow++));
}
public void onFinish()
{
CopyrightTV.setText(String.valueOf(NumberToShow));
this.cancel();
}
}
.start();
}
这并不是什么奇怪的行为 - 考虑到第一个 onTick(long millisUntilFinished) 仅在 100 毫秒(即您设置的间隔)之后调用,而不是在您启动 CountDownTimer 时调用。
其次,CountDownTimer 不是 100% 精确的计时器,所以你可以期待这个 "strange behaviour"。
编辑
如果精度不是特别重要,你可以尝试将 CountDownTimer 增加几百毫秒,像这样:
public void CountDown(final TextView v)
{
final int FinishNumber = 30;
final CountDownTimer CountDown = new CountDownTimer((FinishNumber + 4) * 100, 100)
{
int NumberToShow = 1;
public void onTick(long millisUntilFinished)
{
if (NumberToShow < FinishNumber)
v.setText(String.valueOf(NumberToShow++));
}
public void onFinish()
{
if (NumberToShow < FinishNumber)
v.setText(String.valueOf(NumberToShow));
}
}
.start();
}