Как я могу создать счетчик времени в андроид студии? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь установить в моем приложении таймер, который начинается с 0, и отсчитывает от 0 (секунд), изменяясь от (1 ... 13 ... 59 ... 1:19 и т. Д.), А затемзаканчивается паузы или останавливается, когда игра заканчивается.Я хочу иметь возможность отображать это приостановленное время, чтобы показать, сколько времени потребовалось пользователю, чтобы закончить игру.

Я попробовал метод хронометра (?), Но он продолжал сбивать приложение и не работал.В настоящее время я пытаюсь использовать поток t = новый поток ... но безуспешно.

1 из моих попыток

Thread t = new Thread(){@Override
            public void run(){
                try{
                    while(!isInterrupted()){
                        Thread.sleep(1000);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                TextView textViewTime = findViewById(R.id.textTimer);
                                long time = System.currentTimeMillis();
                                textViewTime.setText(time);
                            }
                        });
                    }
                } catch (InterruptedException e) {
                }
            }
        };
        t.start();

В настоящее время есть подчеркнутое время, которое не может разрешить метод setText (долго) Я беззастенчиво пытался создать этот счетчик с повторным использованием кода из другого проекта, но для этого проекта я использовал метод SimpleDateFormat, так что это было немного проще.

Ответы [ 3 ]

0 голосов
/ 17 июня 2019

Android предлагает CountDownTimer API для выполнения этих операций, посмотрите пример ниже,

long maxCounter = 30000;
long diff = 1000;

    new CountDownTimer(maxCounter , diff ) {

        public void onTick(long millisUntilFinished) {
            long diff = maxCounter - millisUntilFinished;
            mTextField.setText("seconds completed: " +diff  / 1000);
           //here you can have your logic to set text to edittext
        }

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

    }.start();

EDIT:

Я обновил свой ответ для использования в качестве счетчика вверх.

0 голосов
/ 17 июня 2019

Ниже приведен пример для таймера Android. Runnable показывает таймер в формате 0:00. Пример 0:18 или 3:42. Кнопка останавливает таймер.

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class TimerActivity extends AppCompatActivity implements View.OnClickListener {

private long starttime = 0;
private TextView tvTimer;
private Button btnEndTimer;
private Handler timerHandler = new Handler();

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

    tvTimer = findViewById(R.id.tvTimer);
    btnEndTimer = findViewById(R.id.btnEndTimer);
    btnEndTimer.setOnClickListener(this);

    starttime = System.currentTimeMillis();
    timerHandler.postDelayed(timer, 0);
}

protected void onStop() {
    super.onStop();
    timerHandler.removeCallbacks(timer);
}

private Runnable timer = new Runnable() {
    @Override
    public void run() {
        long millis = System.currentTimeMillis() - starttime;
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds %= 60;
        tvTimer.setText(String.format("%d:%02d", minutes, seconds));

        timerHandler.postDelayed(this, 500);
    }
};

@Override
public void onClick(View v) {
    if (v.getId() == R.id.btnEndTimer) {
        timerHandler.removeCallbacks(timer);
    }
}
}
0 голосов
/ 17 июня 2019

Метод setText() для TextView принимает только строки, поэтому компилятор выдает ошибку в этой строке.Используйте Long.toString(time) для отображения времени в TextView.
Поскольку время в миллисекундах, вы, вероятно, захотите его преобразовать в секунды, используя этот фрагмент:

textViewTime.setText(Long.toString(time / 1000));

Я также рекомендую вам сделатьинициализация TextView
TextView textViewTime = findViewById(R.id.textTimer);
ранее в вашем коде, так как он не должен быть частью цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...