2

問題は、カウントダウン中に CountDownTimer に時間を追加または削除するにはどうすればよいですか?

例: ユーザーが何か良いことをした場合: +5 秒、ユーザーが何か間違ったことをした場合: -5 秒。

誰かがコードを手伝ってくれますか?

4

3 に答える 3

6

たぶん、このようなもの

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;
}
于 2012-07-24T12:21:49.863 に答える
1

ユーザーが変更されるたびにタイマーを再起動できます。

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();

    }
}
于 2012-07-24T12:23:06.633 に答える
1
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 つの異なる部分を異なる場所で使用できます。

于 2015-01-27T10:57:55.757 に答える