2013-07-05 2 views
4

Я хочу отображать таймер в TextView в формате [19:59] .so, когда я нажимаю кнопку запуска, таймер будет отображаться, например, таким образом, я хочу установить до 20 минут, он будет отображаться как [19:58] [19:87]. Любой может дать некоторые идеи или примерный код? enter image description hereКак показать таймер в android

+1

Вы пробовали что-нибудь ?? – Krrishnaaaa

+0

Можете ли вы показать нам, что у вас есть? –

+0

большинство примеров звезд со стартовым временем, например 1,2,3 секунды uptp 60 секунд. Мне нужен обратный порядок – rajeshlawrance

ответ

11

Вы можете использовать CountDownTimer.

http://developer.android.com/reference/android/os/CountDownTimer.html

 TextView _tv = (TextView) findViewById(R.id.textView1); 
    new CountDownTimer(20*60000, 1000) { 

     public void onTick(long millisUntilFinished) { 
      _tv.setText("seconds remaining: " +new SimpleDateFormat("mm:ss:SS").format(new Date(millisUntilFinished))); 
     } 

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

Для отмены просто позвоните отменить таймер.

public final void cancel()

Отменить обратный отсчет.

+0

Можно ли использовать таймер подсчета? то есть начиная с 0 и доходит до бесконечности – faizal

+0

Почему это 20 * 60000 –

+0

@RuchirBaronia первый аргумент длится миллисекунды для тестирования, я использовал это. Вы можете изменить его на все, что вы считаете нужным – Raghunandan

12
package com.example.testproject; 

import java.util.Timer; 
import java.util.TimerTask; 

import android.os.Bundle; 
import android.widget.TextView; 
import android.app.Activity; 

public class MainActivity extends Activity { 

    public int seconds = 60; 
    public int minutes = 10; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Declare the timer 
     Timer t = new Timer(); 
     //Set the schedule function and rate 
     t.scheduleAtFixedRate(new TimerTask() { 

      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         TextView tv = (TextView) findViewById(R.id.main_timer_text); 
         tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds)); 
         seconds -= 1; 

         if(seconds == 0) 
         { 
          tv.setText(String.valueOf(minutes)+":"+String.valueOf(seconds)); 

          seconds=60; 
          minutes=minutes-1; 

         } 



        } 

       }); 
      } 

     }, 0, 1000); 
    } 

} 
+0

это код, который я попробовал, и я получил ответ своей собственной логикой. – rajeshlawrance

+0

небольшая ошибка: вторая - = 1 должна быть после if (секунды == 0) {...}, иначе вторая секунда вашего таймера покажет 0 после 2 – Daryn

5
//start button click 
    CountDown timer = new CountDown(180000, 1000); 
    timer.start(); 

//stop button click 
timer.stop(); 

    //countdown class 
    public class CountDown extends CountDownTimer { 

      public CountDown(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
      long ms = millisUntilFinished; 
      String text = String.format("%02d\' %02d\"", 
             TimeUnit.MILLISECONDS.toMinutes(ms) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(ms)), 
             TimeUnit.MILLISECONDS.toSeconds(ms) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ms))); 
      textViewTimer.setText(text); 
      } 

      @Override 
      public void onFinish() { 
      textViewTimer.setText("ffinish"); 
      } 
     } 
0

Это может быть сделано с помощью cronometer, самая главная причина, поддерживает API 1+, что весьма впечатляет, а не TextClock, который поддерживает API 17+.

Вы можете сделать много других вещей с помощью кронометра. , например вы можете установить время запуска в нем

chronometer.setBase (SystemClock.elapsedRealtime());

Вы также можете узнать об этом больше here.

0

Здесь я использовать класс Timer для отображения таймера

public class FourthActivity extends AppCompatActivity { 
    Button startButton, pauseButton; 
    TextView timerValue; 
    Timer timer; 
    int seconds = 0, minutes = 0, hour = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fourth); 
     bindView(); 

     timer = new Timer(); 
     startButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       timer.scheduleAtFixedRate(new TimerTask() { 
        @Override 
        public void run() { 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           if (seconds == 60) { 
            timerValue.setText(String.format("%02d", hour) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds)); 
            minutes = seconds/60; 
            seconds = seconds % 60; 
            hour = minutes/60; 
           } 
           seconds += 1; 
           timerValue.setText(String.format("%02d", hour) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds)); 
          } 
         }); 
        } 
       }, 0, 1000); 
      } 
     }); 
    } 

    private void bindView() { 
     timerValue = (TextView) findViewById(R.id.timerValue); 
     startButton = (Button) findViewById(R.id.startButton); 
    } 
} 

В макете есть одна TextView и одна кнопка для запуска таймера. У меня есть метод класса Timer scheduleAtFixedRate. Время будет отображаться в форме hh: mm: ss.

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