問題は、カウントダウン中に CountDownTimer に時間を追加または削除するにはどうすればよいですか?
例: ユーザーが何か良いことをした場合: +5 秒、ユーザーが何か間違ったことをした場合: -5 秒。
誰かがコードを手伝ってくれますか?
問題は、カウントダウン中に CountDownTimer に時間を追加または削除するにはどうすればよいですか?
例: ユーザーが何か良いことをした場合: +5 秒、ユーザーが何か間違ったことをした場合: -5 秒。
誰かがコードを手伝ってくれますか?
たぶん、このようなもの
abstract class MyTimer {
public MyTimer(long deadline, long interval)
{
mDeadline = deadline;
mInterval = interval;
mTimer = new MyCountDownTimer(mDeadline, mInterval);
}
public synchronized void start() {
mTimer.start();
}
public abstract void onTick(long time);
public abstract void onFinish();
public synchronized void userDidRight()
{
mTimer.cancel();
mTimer = new MyCountDownTimer(mDeadline, mInterval += 5000);
mTimer.start();
}
public synchronized void userDidWrong()
{
mTimer.cancel();
mTimer = new MyCountDownTimer(mDeadline, mInterfval -= 5000);
mTimer.start();
}
private class MyCountDownTimer extends CountDownTimer() {
private abstract void onFinish() {
MyTimer.this.onFinish();
}
private abstract void onTick(long time) {
MyTimer.this.onTick(time);
}
}
private MyCountDownTimer mTimer;
}
ユーザーが変更されるたびにタイマーを再起動できます。
class Timer {
private long remainingTime;
private CoundDownTimer timer;
public void addTime(long addedTimeInMillis) {
createNewTimer(remainingTime + addedTimeInMills);
}
public void createNewTimer(long timeInMillis) {
if(timer != null) {
timer.cancel();
}
timer = new CountDownTimer(timeInMillis, 1000) {
@Override
public void onTick(final long millisUntilFinished) {
remainingTime = millisUntilFinished;
}
@Override
public void onFinish() {
// do something here
}
}.start();
}
}
private class startTimer extends CountDownTimer
{
public startTimer(long millisInFuture, long countDownInterval)
{
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
currenttime=millisUntilFinished;
textview.setText("" + currenttime / 1000);
}
@Override
public void onFinish() {
textview.setText("done");
}
}
上記のクラスは、CountDownTimer の単純な派生クラスです。
CountDownTimer timer = new CountDownTimer(30000,1000);
timer.start();
long currentTime;
たとえば、上記のタイマーは 30 秒から始まり、1 秒ごとに 1 ずつ減少します。タイマーを動的に増減するには、古いタイマーをキャンセルして、以下に示すように新しい時間で初期化します。
timer.cancel();
timer = new CountDownTimer(currentTime+5000,1000);// +5000 to increase by 5 secs
timer.start();
timer,currentTime 変数をグローバルとして作成すると、コードの 2 つの異なる部分を異なる場所で使用できます。