Chronometer

2193 ワード

概要
公式に提供されている簡易版時間表示コントロールGoogle転送ゲート
タイミング機能
  • 計時開始
  • chronometer.start()
    
  • 計時停止
  • chronometer.stop()
    
  • リセット時間
  • chronometer.setBase(SystemClock.elapsedRealtime());
    
  • カウントダウン(推奨なし)
  • chronometer.setBase(SystemClock.elapsedRealtime() + 60 * 1000L);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
       chronometer.setCountDown(true);
    }
    chronometer.start();
    

    カウントダウン機能ここではAndroid以上の使用を提供しているだけで、カウントダウンが終了してからもタイムリーに停止していない(OnChronometertTickListenerで時間が「00:00」かどうかを傍受して手動で停止することができる)、Handlerで代用したりCountDownTimerで代用したりすることができます.
  • フォーマット時間
  • ChronometerはsetFormatを提供して時間をフォーマットしますが、元の時間フォーマットでしか文字の追加はできません.
    chronometer.setFormat("      :%s");
    //         MM:SS
          :00:00
    //         H:MM:SS
          :1:00:00
    
  • フォーマット時間00:00:00:00
  • timer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
                @Override
                public void onChronometerTick(Chronometer chronometer) {
                    setFormat(timer);
                }
            });
    
    private void setFormat(Chronometer chronometer){
            int hour = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60 / 60);
            int minute = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60) % 60;
            int second = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000) % 60;
            if (hour < 1) {
                if (minute == 59 && second == 59) {
                    chronometer.setFormat("0" + "%s");
                } else {
                    chronometer.setFormat("0" + String.valueOf(hour) + ":%s");
                }
            } else if (hour < 10) {
                chronometer.setFormat("0" + "%s");
            } else {
                chronometer.setFormat("%s");
            }
     }
    

    59:59から1:00:00までは、事前に処理する必要があります.ここはリスニング後にフォーマットされているので、一歩遅れます.
  • テスト推奨
  • 初期時間をシステム時間に59分50秒後退させると、59:50から計時が始まります
    chronometer.setBase(SystemClock.elapsedRealtime()-59*60*1000L-50*1000L);