有关于 CountDownTimer 的问题。我必须制作一个应用程序,允许用户每次单击按钮时将时间时间增加 +1。然后,在停止单击按钮后,它会等待三秒钟,然后开始倒计时。
我将代码粘贴在下面。
我的问题是:我似乎无法使数字递增正常工作,但是似乎在我停止递增数字(onStop())后,它直接转到(onFinish())。而不是转到 OnTick() 并每秒将数字减 1。我尝试了多种方法来解决这个问题,但都被卡住了。
任何人都可以引导我朝着正确的方向前进吗?任何帮助,将不胜感激。谢谢大家!
public class MainActivity extends Activity {
Button incrementTime, startTime;
public TextView timedisplay;
public myTimer wavetimer;
private long millisInFuture;
private long millisUntilFinished;
private long countDownInterval;
private long onclicktime;
//private WaveInterface model;
public int countdown;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
incrementTime = (Button) findViewById(R.id.button2);
startTime = (Button) findViewById(R.id.button3);
incrementTime.setText("Increment Time");
startTime.setText("Start");
timedisplay = (TextView) findViewById(R.id.mycounter);
timedisplay.setText("Time Left: " + millisUntilFinished);
wavetimer = new myTimer (millisInFuture, 1000);
incrementTime.setOnClickListener(new OnClickListener(){
int countdown = 01;
/**
* On click button Listner
* @return
*/
public void onClick(View v) {
millisInFuture++;
return;
}
});
startTime.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
wavetimer.start();
}
});}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public class myTimer extends CountDownTimer {
public long millisInFuture;
private long countDownInterval;
public myTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
millisUntilFinished--;
if (millisUntilFinished == 0){
wavetimer.onFinish();
}
else {
timedisplay.setText("Time Left: " + millisUntilFinished / 1000);
}
}
@Override
public void onFinish() {
timedisplay.setText("Countdown Finished");
wavetimer.cancel();
}
public void onStop() {
millisInFuture = millisInFuture + 1;
timedisplay.setText("Time Left: " + millisInFuture);
}
我似乎不知道如何正确地增加数字。我尝试了多种方法,但总是出错。不知道该去哪里寻找。任何帮助,将不胜感激。谢谢大家!
最佳答案
你应该知道,在倒计时类中,当时间到了时,你不必手动调用 onFinish
,也不必在 onFinish
中取消导致其他或手动减少任何内容。尝试以下操作,看看它是否适合您想要的任务。希望您能注意到,我没有看到实用的理由来查看按钮是否“不再被单击”。
public class MainActivity extends Activity {
Button incrementTime, startTime;
public TextView timedisplay;
long millisInFuture = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
incrementTime = (Button) findViewById(R.id.button2);
startTime = (Button) findViewById(R.id.button3);
timedisplay = (TextView) findViewById(R.id.mycounter);
resetText();
incrementTime.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
millisInFuture += 1000;
resetText();
}
});
startTime.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
CountDownTimer wavetimer = new myTimer(millisInFuture + 3000, 1000).start();
// ^ add 3 seconds.
}
});}
protected void resetText() {
timedisplay.setText("Time Left: " + millisInFuture / 1000);
}
public class myTimer extends CountDownTimer {
private long millisActual;
public myTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
millisActual = millisInFuture - 3000;
}
@Override
public void onTick(long millisUntilFinished) {
//v start showing the tick after 3 seconds.
if (millisUntilFinished <= millisActual) {
timedisplay.setText("Time Left: " + millisUntilFinished / 1000);
}
}
@Override
public void onFinish() {
timedisplay.setText("Countdown Finished");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
关于java - Android 增加倒计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478471/