2013-12-06 2 views
0

, как показано на посту Сэма на here, я не уверен, какой метод использовать для запуска таймера обратного отсчета «AccurateCountDownTimer».Какой метод я называю, чтобы начать обратный отсчет таймера «AccurateCountDownTimer»

Он будет вызываться с помощью кнопки (onClick), которую легко настроить позже. И оставшееся время будет отображаться в текстовом режиме.

Вот мой код:

public abstract class AccurateCountDownTimer { 

    public AccurateCountDownTimer(long millisInFuture, long countDownInterval) { 
     long seconds = (millisInFuture/1000); 
     mMillisInFuture = millisInFuture; 
     mCountdownInterval = countDownInterval; 

     // ************AccurateCountdownTimer*************** 
     mTickCounter = 0; 
     // ************AccurateCountdownTimer*************** 
     testTimer.setText(String.format("%02d", seconds/60) + ":" 
       + String.format("%02d", seconds % 60)); 
    } 

    /** 
    * Cancel the countdown. 
    */ 
    public final void cancel() { 
     mHandler.removeMessages(MSG); 
    } 

    /** 
    * Start the countdown. 
    */ 
    public synchronized final AccurateCountDownTimer start() { 
     if (mMillisInFuture <= 0) { 
      onFinish(); 
      return this; 
     } 

     mNextTime = SystemClock.uptimeMillis(); 
     mStopTimeInFuture = mNextTime + mMillisInFuture; 

     mNextTime += mCountdownInterval; 
     mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG), mNextTime); 
     return this; 
    } 

    /** 
    * Callback fired on regular interval. 
    * 
    * @param millisUntilFinished 
    *   The amount of time until finished. 
    */ 
    public abstract void onTick(long millisUntilFinished);{ 



    } 

    /** 
    * Callback fired when the time is up. 
    */ 
    public abstract void onFinish(); 

    private static final int MSG = 1; 

    // handles counting down 
    private Handler mHandler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      synchronized (AccurateCountDownTimer.this) { 
       final long millisLeft = mStopTimeInFuture - SystemClock.uptimeMillis(); 

       if (millisLeft <= 0) { 
        onFinish(); 
       } else { 
        onTick(millisLeft); 

        // Calculate next tick by adding the countdown interval from the original start time 
        // If user's onTick() took too long, skip the intervals that were already missed 
        long currentTime = SystemClock.uptimeMillis(); 
        do { 
         mNextTime += mCountdownInterval; 
        } while (currentTime > mNextTime); 

        // Make sure this interval doesn't exceed the stop time 
        if(mNextTime < mStopTimeInFuture) 
         sendMessageAtTime(obtainMessage(MSG), mNextTime); 
        else 
         sendMessageAtTime(obtainMessage(MSG), mStopTimeInFuture); 
       } 
      } 
     } 
    }; 
} 

ответ

0

Я не уверен, если я понимаю ваш вопрос ... Есть ли спросить вас, как использовать этот класс? Я думаю, что это будет достаточно, чтобы начать таймер, как это:

new AccurateCountDownTimer(millisInFuture, countDownInterval).start(); 

Edit: А также вы можете иметь обратные вызовы, как описано в source code:

new AccurateCountDownTimer(millisInFuture, countDownInterval) { 

public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
} 

    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
}.start(); 
+0

Я хочу, чтобы таймер начал с помощью кнопки как это: общественная пустота OnClick (View v) { если (v.getId() == R.id.buttonStartR1) {// запуска таймера здесь } Точно так же, что если я звоню регулярно countDownTimer Я бы использование countDownTimer(); – HairySocks

+0

Тогда напишите эту строку там .. – yahya

+0

Когда я использую этот код, он дает ошибку: «Невозможно создать экземпляр типа MainActivity.AccurateCountDownTimer» – HairySocks

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

  • Нет связанных вопросов^_^