Создать таймер постепенного увеличения в секундах в 0:00 формат?

Я хочу создать увеличивающий второй таймер как секундомер.

Таким образом, я хочу смочь отобразить секунды и минуты, увеличивая в формате 00:01...

Google только поднимает 24-часовые примеры часов, я задавался вопросом, кто-либо мог запустить меня с примера или учебного руководства того, что я хочу сделать?

Править:

Вот то, что у меня есть использование Хронометра в Android до сих пор

В onCreate ()

    secondsT = 0;
    elapsedTimeBeforePause = 0;

    stopWatch.start();
    startTime = SystemClock.elapsedRealtime();
    stopWatch.setBase(elapsedTimeBeforePause);

     stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                //countUp is a long declared earlier
                secondsT = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (secondsT / 60) + ":" + (secondsT % 60); 
                //textGoesHere is a TextView
                ((TextView)findViewById(R.id.time)).setText(asText);
            }
     });

В onDestroy ()

@Override
public void onDestroy() {

    inCall = false;
    elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();

    super.onDestroy();
}

Вышеупомянутые компиляции и выполнения, но TextView никогда не увеличивают, это всегда остается в 0, кто-либо может видеть почему?

9
задан Donal Rafferty 29 March 2010 в 11:26
поделиться

2 ответа

Я предполагаю, что вы не знаете о Android Chronometer - в нем уже есть базовая функция секундомера. Вам нужно немного поработать с его особенностями, но несложно заставить его делать то, что вы хотите, как только вы поймете, как он работает.

Существует несколько способов расчета времени на телефоне, но два основных:

  1. "реальное время", например, сейчас, согласно часам моего компьютера, 11:23 утра в Англии. Однако оно может измениться, если мой компьютер свяжется с сервером времени и ему сообщат, что время неверное, или если я путешествовал с ноутбуком и пересек границу часовых поясов. Использование этого метода может привести к хаосу с секундомером, так как измеренное время может измениться в любой момент.

  2. Прошедшее время с момента загрузки" - это количество миллисекунд с момента включения телефона. Это число не имеет никакого отношения к реальному времени, но оно будет вести себя совершенно предсказуемым образом. Вот что использует хронометр Android.

Хронометр Chronometer - это, по сути, таймер "обратного отсчета", сравнивающий текущее SystemClock.elapsedRealtime() с elapsedRealtime(), которое было установлено в качестве базового времени. Разница между ними, деленная на 1000, - это количество секунд, прошедших с момента запуска таймера. Однако, если остановить таймер, а затем запустить его снова, вы получите неинтуитивный результат - таймер покажет прошедшее время, как будто он никогда не останавливался. Это происходит потому, что вам необходимо скорректировать его базовое время, чтобы учесть время, когда он был остановлен. Сделать это просто:

// When you're stopping the stopwatch, use this
// This is the number of milliseconds the timer was running for
elapsedTimeBeforePause = SystemClock.elapsedRealtime() - timer.getBase();

// When you're starting it again:
timer.setBase(SystemClock.elapsedRealtime() - elapsedTimeBeforePause);

Edit: Вот полный код базового секундомера, который отображает время в TextView, а не в виджете Chronometer, объявленном в вашем XML-файле.

public class TestProject extends Activity {
    TextView textGoesHere;
    long startTime;
    long countUp;

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

        Chronometer stopWatch = (Chronometer) findViewById(R.id.chrono);
        startTime = SystemClock.elapsedRealtime();

        textGoesHere = (TextView) findViewById(R.id.textGoesHere);
        stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (countUp / 60) + ":" + (countUp % 60); 
                textGoesHere.setText(asText);
            }
        });
        stopWatch.start();
    }
}

В вашем main.xml должно быть следующее

<Chronometer android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/chrono"
    android:visibility="gone"/>

Несомненно, есть способ заставить Хронометр работать без объявления его в XML-файле, но конструктор Chronometer stopwatch = new Chronometer(this); не работает должным образом.

Приведенный выше код отображает прошедшее время очень простым способом. Например, если прошло всего 5 секунд, он покажет 0:5, а не 0:05, как вы, вероятно, хотите. Исправить это несложно, но я оставлю это на ваше усмотрение! :)

29
ответ дан 4 December 2019 в 07:14
поделиться

Как насчет этих Цифровых часов .

Но в основном вы сможете найти множество реализаций Java, выполнив поиск в Google по таким ключевым словам, как java, секундомер, цифровые часы, ...

Вы можете взглянуть на Аплет секундомера и при необходимости изменить (К сожалению, здесь нет источника)

2
ответ дан 4 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: