18

Chronometer を完全に再起動しようとしていますが、機能しません。代わりに一時停止中です。基本的に私がやろうとしているのは、クロノメーターが 10 までカウントしている間に何かをすることです。それが終わったら、ユーザーに再試行するように促します。その場合、カウントを 1 秒から 10 秒にやり直します。ただし、クロノメーターは 0 からではなく、一時停止した時間から開始します。

コードは次のとおりです。

_cutOfTime = 10; // constant

ボタンを押すたびにstartRecording()

クロノメーターを停止/一時停止するのではなく、常に開始する必要がありますが、逆のことを行います

protected void startRecording(){    

this._watch = (Chronometer) findViewById(R.id.chrono);

            if (this._watch != null)
                 this._watch.setOnChronometerTickListener(new OnChronometerTickListener() {

                        @Override
                        public void onChronometerTick(Chronometer chronometer) {
                            long countUp = (SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000;
                            Log.i(_tag, "time now: " + String.valueOf(countUp));

                            if(countUp > _cutOfTime)
                            {
                                Log.i(_tag, "stop recording!!: ");
                                 _watch.stop();
                                stopRecordWav();
                                launchPromptWithResults();
                            }
                            long sec = countUp % 60;

                            String asText = "" + sec;
                            _textView.setText("Recorded: " + asText);
                        }
                    });


            if (_watch != null)
            _watch.start();
}

クロノメーターを一時停止せずに完全に停止するようにリセットする方法はありますか?

4

1 に答える 1

37

少し前にクロノメーターで遊んだとき、setBase() メソッドを使用して、start() を呼び出す直前にベースを現在の時刻に設定しました。正確なニーズに応じて、クロノメーターを開始する前にリセットするかどうかについて、いくつかのロジックを追加する必要がある場合があります。

View.OnClickListener mStartButtonListener = new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            mChronometer.setBase(SystemClock.elapsedRealtime());
            mChronometer.start();
        }
    };
于 2011-03-17T22:21:50.987 に答える