2016-01-20 2 views
1

Я пытаюсь сделать приложение обратного отсчета, где максимальное время будет меньше 10 минут, и я хотел бы, чтобы он показывался как mm: ss: ms (не слишком уверен, что ms - это термин для миллисекунды). и это то, что я есть здесьобратный отсчет android до миллисекунд

 text = (TextView) this.findViewById(R.id.counterView); 
    new CountDownTimer(16069000, 10) { // adjust the milli seconds here 
     public void onTick(long millisUntilFinished) { 
      text.setText(""+String.format("%02d:%02d:%02d", 
        TimeUnit.MILLISECONDS.toHours(millisUntilFinished), 
        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), 
        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)) 
        )); 
     } 

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

он в настоящее время показывая чч: мм: сс, я пытался играть с ним, но не мог заставить его работать. Я пытался поставить формат, как

"% 02d:% 02d:% 02d:% 03d"

но я заблудился, когда я пытался добавить миллисекунды часть внутри SetText.

ответ

2

Вы явно показывая часы: минуты: секунды здесь:

 text.setText(""+String.format("%02d:%02d:%02d", 
       TimeUnit.MILLISECONDS.toHours(millisUntilFinished), 
       TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), 
       TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)) 
       )); 

изменить его на что-то вроде:

 long m = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished); 
     long s = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished - m*60*1000); 
     long ms = millisUntilFinished - m*60*1000 - s*1000; 
     text.setText(""+String.format("%02d:%02d:%02d",m,s,ms)); 
0

Что вы имеете в виду заблудиться?

Если вы спрашивали, какое значение поставить на миллисекунды части, просто используйте

millisUntilFinished % 1000 
1

здесь код

CounterClass timer = new CounterClass(150000, 1000); // set time here 
    timer.start(); 

define class here 

public class CounterClass extends CountDownTimer { 
     public CounterClass(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onFinish() { 
      // timeTextView.setText("Completed."); 

      this.cancel(); 

      finish(); 
     } 

     public void onTick(long millisUntilFinished) { 
      long millis = millisUntilFinished; 
      caaryLong = millis; 
      String hms = String.format(
        "%02d:%02d", 
        TimeUnit.MILLISECONDS.toMinutes(millis) 
          - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS 
            .toHours(millis)), 
        TimeUnit.MILLISECONDS.toSeconds(millis) 
          - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
            .toMinutes(millis))); 
      System.out.println(hms); 

      timeTextView.setText(hms); 
     } 
    } 
1

если вы используете Android Studio, чем есть одна внешняя библиотека

Шаг 1: В build.gradle (приложение модуля)

компиляция 'Joda время: Joda время: 2.9.1'

Шаг 2: В вашей деятельности .xml файл

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll_main" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/darker_gray" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    tools:context="com.countdowntimer.MainActivity"> 

<TextView 
     android:id="@+id/tv_milliseconds" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:gravity="center" 
     android:text="MilliSeconds" 
     android:textColor="@android:color/white" 
     android:textSize="80sp" /> 

    <Chronometer 
     android:id="@+id/chronometer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:visibility="gone" /> 
</LinearLayout> 

Шаг 3: Инициализировать TextView и хронометр

CountDownTimer countDownTimer; 
    private long startTime = 1000; 
    private final long interval = 100; 

Шаг 4: В OnChronometerTickListener

chronometer.start(); 
chronometer.setBase(1); 
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { 
      @Override 
      public void onChronometerTick(Chronometer chronometer) { 
       setDateTime(); 
      } 
     }); 

шаг 5: Создание функции

public void setDateTime() { 
     countDownTimer = new MalibuCountDownTimer(startTime, interval); 
     countDownTimer.start(); 

} 

public class MalibuCountDownTimer extends CountDownTimer { 

     public MalibuCountDownTimer(long startTime, long interval) { 
      super(startTime, interval); 
     } 

     @Override 
     public void onFinish() { 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      tvMilliseconds.setText("" + millisUntilFinished); 
     } 
    } 
1

Я на самом деле удалось сделать это с помощью следующего кода text.setText(""+String.format("%02d:%02d:%03d", TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)) ));

Смежные вопросы