Итак, когда мой секундомер остановлен, он показывает время его остановки, но когда кнопка запуска снова нажата, он возобновляет время до 0:00:00, как я могу возобновить его с время остановилось? Вот весь код, если это необходимоВозобновление секундомера после остановки
package com.webdeveloper93.stopwatch;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import android.os.Bundle;
import android.os.Handler;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class StopWatch extends Activity implements OnClickListener {
private long startTime;
private long endTime;
private Random rand = new Random();
private boolean timerIsRunning;
private String savedTime;
private TextView stopWatchC;
private Button startButton,stopButton,pauseButton;
private RelativeLayout mainLayout;
private Handler handle;
private Handler backHand = new Handler();
private boolean paused;
private long UPDATE_EVERY = 200;
private int backgrounds[] = {R.drawable.woman_1,R.drawable.woman_2,R.drawable.woman_3,R.drawable.woman_4};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stopwatch);
stopWatchC = (TextView) findViewById(R.id.counter);
startButton = (Button) findViewById(R.id.start_button);
stopButton = (Button) findViewById(R.id.stop_button);
pauseButton = (Button) findViewById(R.id.pause);
mainLayout = (RelativeLayout) findViewById(R.id.main_layout);
//ONCLICK HANDLERS
startButton.setOnClickListener(this);
stopButton.setOnClickListener(this);
pauseButton.setOnClickListener(this);
backHand.postDelayed(backgroundUpdate, 300);
}
/**
* Handles displaying the counter
*/
public void SWCounterDisplay()
{
String display;
long now;
long difference;
long secs;
long mins;
long hours;
if(timerIsRunning == true)
{
now = System.currentTimeMillis();
}else{
now = endTime;
}
difference = now-startTime;
//No negative numbers
if(difference < 0)
{
difference = 0;
}
secs = difference/1000;
mins = secs/60;
hours = mins/60;
secs = secs%60;
mins = mins%60;
display = String.format("%d", hours) + ":" +
String.format("%02d",mins) + ":" +
String.format("%02d", secs);
stopWatchC.setText(display);
}
public void pauseTimer()
{
timerIsRunning = false;
endTime = System.currentTimeMillis();
startButton.setEnabled(true);
}
/**
* Starts the stop watch
*/
public void startTimer()
{
timerIsRunning = true;
stopButton.setEnabled(timerIsRunning);
startButton.setEnabled(false);
startTime = System.currentTimeMillis();
//Create new handler
handle = new Handler();
handle.postDelayed(timerUpdate, UPDATE_EVERY);
}
/**
* Stops the timer
*/
public void stopTimer()
{
timerIsRunning = false;
stopButton.setEnabled(timerIsRunning);
startButton.setEnabled(true);
endTime = System.currentTimeMillis();
handle.removeCallbacks(timerUpdate);
handle = null;
}
/**
* Handles any onclick events
*/
@Override
public void onClick(View v) {
if(v == startButton)
{
startTimer();
}else if(v == stopButton)
{
stopTimer();
}else if(v == pauseButton)
{
pauseTimer();
}
}
private Runnable backgroundUpdate = new Runnable(){
@Override
public void run() {
mainLayout.setBackgroundResource(backgrounds[rand.nextInt(backgrounds.length)]);
backHand.postDelayed(this, 20000);
}
};
/**
* Handles updating the timer
*/
private Runnable timerUpdate = new Runnable(){
@Override
public void run() {
SWCounterDisplay();
if(handle != null){
//Log.d("Run Method","RUN METHOD IS RUNNING");
handle.postDelayed(this, UPDATE_EVERY);
}
}
};
/**
* Call run method if timer is still running
*/
public void onStart()
{
super.onStart();
if(timerIsRunning == true)
{
handle = new Handler();
handle.postDelayed(timerUpdate, UPDATE_EVERY);
}
}
/**
* Stop the timer if timer is still running
*/
public void onStop()
{
super.onStop();
if(timerIsRunning == true)
{
handle.removeCallbacks(timerUpdate);
handle = null;
}
}
/**
* Resume when the onResume method is called
*/
public void onResume()
{
super.onResume();
stopButton.setEnabled(false);
startButton.setEnabled(true);
SWCounterDisplay();
}
}
Хорошо это решение работает на полпути, однако, когда я действительно возобновить его, как его все еще рассчитывает в фон во время паузы. В зависимости от того, как долго он приостанавливается, он заканчивает добавление нескольких секунд, минут и т. Д. К таймеру, когда я возобновляю – user3325917
Хорошо ... вместо того, чтобы полагаться только на время начала/окончания, вам также нужно будет поддерживать дополнительное значение, который является «временем выполнения». Поэтому каждый раз, когда вы приостанавливаете/возобновляете секундомер, вам нужно сбросить время «startTime» и добавить результирующее значение в «время выполнения», поэтому «время выполнения» станет основанием для ваших вычислений ... – MadProgrammer
Can пожалуйста, дайте мне пример? Im визуальный человек, поэтому его легче понять на примере. Еще раз спасибо за помощь – user3325917