1

私はカウントダウンタイマーに慣れていないので、この問題についてはわかりません。多くのことを試しましたが、期待したものが得られませんでした。これは私のタイマーのコードです。いつものようにクラス内のクラスです。

// TIMER
    public class Timer extends CountDownTimer {

        public Timer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onFinish() {

            //getNgo(true, score, tries, secLeft);
        }

        @Override
        public void onTick(long millisUntilFinished) {

            //secLeft = millisUntilFinished;

            int sec = (int) (millisUntilFinished / 1000);
            sec = sec % 60;
            int min = sec / 60;
            tvTime.setTextColor(Color.WHITE);

            if (sec <= 10) {

                animScale(tvTime);

                tvTime.setTextColor(Color.RED);
                tvTime.setText("" + min + ":" + sec);

                if (sec < 10) {
                    tvTime.setTextColor(Color.RED);
                    tvTime.setText("" + min + ":0" + sec);
                }

            } else {
                tvTime.setText("" + min + ":" + sec);
            }
        }

    }

そのため、ボタンを押すと3秒(つまり3000ミリ秒)を差し引く方法を知りたかったのですが、テキストビューに表示されるタイマーは刻々と過ぎていきますが、時間はすでに差し引かれています。そして、どこにコードを配置しますか。ありがとう!

4

3 に答える 3

0

決まった時間にスケジュールされたタスクでこれを行う必要があったとき、私は次のことを行いました。

  1. 元のタスクをキャンセルしました。
  2. 新しい期間で新しいものを提出しました。

Timerとにかく、これはあなたが使用するよりも標準的なパターンだと思います。

例えば:

private final Runnable task = new Runnable() { @Override public void run() { /* ... */ } };

private final ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor();

private final long initialSeconds = 3;

public void submitTask() {
    stpe.schedule(task, initialSeconds, TimeUnit.Seconds());
}

public void subtractSeconds(long sec) {
    if(stpe.remove(task)) {
        stpe.schedule(task, Math.Max(initialSeconds - sec, 0), TimeUnit.Seconds);
    }
}

次のことを理解する必要があります。

  • タスクが最初に一度だけ送信され、固定変数を追跡する方法
  • 1 つの固定finalタスクが必要か、そのタスクを変更する必要があるか
  • タスクを複数回送信できる場合の同時実行性/マルチスレッドの問題
于 2013-02-24T16:55:52.090 に答える
-1

できません。自分で書く必要がありますCountDownTimer。元のコードをコピーしてメソッドを追加

public synchronized void addTime(long millis) {
    mStopTimeInFuture += millis;
}

次にonClickListener、ボタンに設定します

bt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        timer.addTime(-2000);       
    }
});

ここに完全なサンプルコードがあります

于 2013-02-24T16:53:29.367 に答える