21
cmtr.setText(finalTime);
cmtr.setBase(SystemClock.elapsedRealtime());

timetest = SystemClock.elapsedRealtime();
Log.d("SETTIME: ", ""+timetest);
cmtr.start();

eltime = SystemClock.elapsedRealtime();
Log.d("ELapsed: ", ""+eltime);

注:クロノメーターを逆の順序で起動したい。クロノメーターを10秒に設定したように。今、私は逆の順序で10から0秒から始めたいと思います。だから誰もがこの解決策を手に入れるのを手伝うことができますか?よろしくお願いします。

4

6 に答える 6

51

できません。クロノメーターウィジェットはカウントアップするだけです。それが、その目的のために作られた特定の目的です。カウントダウンする場合は、CountDownTimer(Android SDKページにTextViewが更新される特定の例が含まれています)を使用するか、独自のソリューションをロールダウンします。

これらのクラスは、タイピングを節約するための簡単なラッパーです。正確なニーズに合わない場合でも、代替の実装を作成することに違和感を覚えることはありません。

[アップデート]

Ronaldo Bahiaがコメントに追加したように、API 24以降、クロノメーターは実際にはsetCountDownメソッドを介してこれを機能的に提供します。

于 2013-03-21T20:34:35.147 に答える
22

カウントダウン用のクロノメーターウィジェットは使用できません。以下のCountDownTimerの例を使用してください。カウントダウンは01:45分1秒=1000から始まります。

 CountDownTimer cT =  new CountDownTimer(100000, 1000) {

         public void onTick(long millisUntilFinished) {


                 String v = String.format("%02d", millisUntilFinished/60000);
                 int va = (int)( (millisUntilFinished%60000)/1000);
                 textView.setText("seconds remaining: " +v+":"+String.format("%02d",va));
         }

         public void onFinish() {
             textView.setText("done!");
         }
      };
      cT.start();
于 2014-07-16T07:26:32.373 に答える
3

他のオプションとビューをまだ探している場合は、クロノメーターウィジェットを使用し、setCountDown(ブール値)をtrueに設定することをお勧めします。

例として、あなたの活動または断片で:

  view_timer.base = SystemClock.elapsedRealtime() + 10000    
  view_timer.start()

レイアウト.xmlのウィジェットの場合:

<Chronometer
            android:id="@+id/view_timer"
            android:countDown="true"
            tools:targetApi="24"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
于 2019-03-26T15:04:45.277 に答える
2

setCountDown(true);を使用することもできます。 https://developer.android.com/reference/android/widget/Chronometer.html

于 2016-07-08T11:10:05.570 に答える
2

コロノメーターはカウントアップするだけです。しかし、この小さなトリックで逆にすることができます。

chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer arg0) {
                countUp = (SystemClock.elapsedRealtime() - startTime) / 1000;

                if (countUp % 2 == 0) {
                    chronoRecordingImage.setVisibility(View.VISIBLE);
                } else {
                    chronoRecordingImage.setVisibility(View.INVISIBLE);
                }
                int min = (int) (countUp/60);
                int sec = (int) (countUp%60);

                Utility.printMessage(min+":"+sec);
                int newCount = MAX_TIME - (int) countUp;  // MAIN LOGIC
                String asText = String.format("%02d",(newCount / 60)) + ":"
                        + String.format("%02d", (newCount % 60));

                chrono.setText(asText);
                if (countUp > MAX_TIME) {
                    //time complete
                }
            }
        });
于 2016-08-08T07:30:29.500 に答える
0
private static int sec = 60*2;  // this is for 2 for min TODO replace your sec

    public void startTimer(final TextView textView ,int sec) {

    CountDownTimer downTimer= new CountDownTimer(1000 * sec, 1000) {

        public void onTick(long millisUntilFinished) {


            String v = String.format("%02d", millisUntilFinished / 60000);
            int va = (int) ((millisUntilFinished % 60000) / 1000);
            textView.setText(v + ":" + String.format("%02d", va));
        }

        public void onFinish() {
            textView.setText("done!");
        }
    };
    downTimer.start();

}

そしてこれを呼んでください:

startTimer(tvClock,sec);
于 2018-02-21T00:04:50.787 に答える