如何在Android Studio中创建计时器?

时间:2019-06-17 17:20:12

标签: java android time

我正在尝试在我的应用上放置一个从0开始的计时器,从(1 ... 13 ... 59 ... 1:19等)从0(秒)开始计数结束暂停,或在游戏结束时停止。我希望能够显示此暂停时间,以显示用户完成播放所花费的时间。

我尝试过天文钟表方法(?),但它不断使应用程序崩溃,并且无法正常工作。当前正在尝试使用线程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(long) 我曾无耻地尝试从另一个项目中创建此计数器重用代码,但对于该项目,我使用了SimpleDateFormat方法,因此使用起来稍微容易些。

3 个答案:

答案 0 :(得分:0)

setText()的{​​{1}}方法仅接受字符串,这就是编译器在此行中引发错误的原因。使用TextView在TextView中显示时间。
由于时间以毫秒为单位,您可能需要使用以下代码段将其转换为秒:

Long.toString(time)

我还建议您初始化TextView
textViewTime.setText(Long.toString(time / 1000));
在您代码的前面,因为它不需要成为循环的一部分。

答案 1 :(得分:0)

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();

编辑:

我已更新我的答案以用作向上计数器。

答案 2 :(得分:0)

以下是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);
    }
}
}