自动恢复 CountDownTimer
AutoResume CountDownTimer
我的应用程序中有一个 CountDownTimer
。我正在为我的学校项目开发游戏。我很难确定如何自动恢复倒计时。
这就是我希望我的倒数计时器执行的操作:
单击图像视图以触发倒计时开始(工作)> 单击图像视图以 stop/pause 倒计时 > 10 秒后自动恢复倒计时(我的大问题 T_T)。
我需要一份自动简历,因为我正在开发一款游戏,嗯,我认为这通常是游戏提供的?在我使用的代码中,单击暂停图像视图后,计时器暂停。但是每当我再次单击触发开始的图像按钮时,它都会回到 59,而不是我单击暂停时的时间。
基本上,这是我的第一个应用程序。我现在正在使用 Android Studio(我之前使用 Eclipse Juno)。我非常需要这些方面的帮助。 TIA :)
public class TimeAttack extends Activity {
TextView timer;
private CountDownTimer countDownTimer;
private boolean timeHasStarted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.time_attack);
timer = (TextView) this.findViewById(R.id.timer);
timer.setText("00:01:00");
countDownTimer = new MyCountDownTimer(60000,1000);
blizzard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// this button should pause the time, and its working YAY!
countDownTimer.cancel();
timeHasStarted = false;
}
});
//CustomClickListener
OnClickListener myCommoClickListner = new OnClickListener(){
@Override
public void onClick(View arg0) {
//if an imagebutton is clicked, it will trigger the countdowntimer to start its countdown
if (!timeHasStarted) {
countDownTimer.start();
timeHasStarted = true;
}
}
//COUNTDOWNTIMER
@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") public class MyCountDownTimer extends CountDownTimer{
public MyCountDownTimer(long millisInFuture, long countDownInterval){
super(millisInFuture, countDownInterval);
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") @Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
long millis = millisUntilFinished;
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
System.out.println(hms);
timer.setText(hms);
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
timer.setText("Time's Up!");
}
有不同的方法可以做到这一点。
- 您可以在 UI 线程中使用计时器本身。
您可以在单独的线程中使用计时器(这是一个很好的做法)。有点像。
线程计时器 = new Thread(){
public无效运行(){
尝试
{
睡眠(10000);
}
赶上(中断异常e)
{
e.printStackTrace();
}
最后
{
如果(!timeHasStarted){
countDownTimer.start();
时间已开始=真;
}
}
};
timer.start();
使用处理程序来完成这项工作。代码如下
new Handler().postDelayed(new Runnable() {
/*
* Showing splash screen with a timer. This will be useful when you
* want to show case your app logo / company
*/
@Override
public void run() {
// This method will be executed once the timer is over
// Start your app main activity
if (!timeHasStarted) {
countDownTimer.start();
timeHasStarted = true;
}
}, 10000); //10 seconds
抱歉格式问题,但我认为你可以处理。
我的应用程序中有一个 CountDownTimer
。我正在为我的学校项目开发游戏。我很难确定如何自动恢复倒计时。
这就是我希望我的倒数计时器执行的操作: 单击图像视图以触发倒计时开始(工作)> 单击图像视图以 stop/pause 倒计时 > 10 秒后自动恢复倒计时(我的大问题 T_T)。
我需要一份自动简历,因为我正在开发一款游戏,嗯,我认为这通常是游戏提供的?在我使用的代码中,单击暂停图像视图后,计时器暂停。但是每当我再次单击触发开始的图像按钮时,它都会回到 59,而不是我单击暂停时的时间。
基本上,这是我的第一个应用程序。我现在正在使用 Android Studio(我之前使用 Eclipse Juno)。我非常需要这些方面的帮助。 TIA :)
public class TimeAttack extends Activity {
TextView timer;
private CountDownTimer countDownTimer;
private boolean timeHasStarted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.time_attack);
timer = (TextView) this.findViewById(R.id.timer);
timer.setText("00:01:00");
countDownTimer = new MyCountDownTimer(60000,1000);
blizzard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// this button should pause the time, and its working YAY!
countDownTimer.cancel();
timeHasStarted = false;
}
});
//CustomClickListener
OnClickListener myCommoClickListner = new OnClickListener(){
@Override
public void onClick(View arg0) {
//if an imagebutton is clicked, it will trigger the countdowntimer to start its countdown
if (!timeHasStarted) {
countDownTimer.start();
timeHasStarted = true;
}
}
//COUNTDOWNTIMER
@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") public class MyCountDownTimer extends CountDownTimer{
public MyCountDownTimer(long millisInFuture, long countDownInterval){
super(millisInFuture, countDownInterval);
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") @Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
long millis = millisUntilFinished;
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
System.out.println(hms);
timer.setText(hms);
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
timer.setText("Time's Up!");
}
有不同的方法可以做到这一点。
- 您可以在 UI 线程中使用计时器本身。
您可以在单独的线程中使用计时器(这是一个很好的做法)。有点像。
线程计时器 = new Thread(){ public无效运行(){ 尝试 { 睡眠(10000); } 赶上(中断异常e) { e.printStackTrace(); } 最后 { 如果(!timeHasStarted){ countDownTimer.start(); 时间已开始=真; } } }; timer.start();
使用处理程序来完成这项工作。代码如下
new Handler().postDelayed(new Runnable() { /* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / company */ @Override public void run() { // This method will be executed once the timer is over // Start your app main activity if (!timeHasStarted) { countDownTimer.start(); timeHasStarted = true; } }, 10000); //10 seconds
抱歉格式问题,但我认为你可以处理。