我正在尝试在我的应用上放置一个从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方法,因此使用起来稍微容易些。
答案 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);
}
}
}