Java 天文钟恢复了吗?
当我单击开始时,“秒表”开始计数。。我按了暂停,只有文本视图暂停了,它没有恢复,因为它仍在后台运行。。我需要在我停下来的地方恢复 下面是我的dot java代码:Java 天文钟恢复了吗?,java,android,chronometer,Java,Android,Chronometer,当我单击开始时,“秒表”开始计数。。我按了暂停,只有文本视图暂停了,它没有恢复,因为它仍在后台运行。。我需要在我停下来的地方恢复 下面是我的dot java代码: package com.example.chronometer2; import com.example.chronometer.R; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import andro
package com.example.chronometer2;
import com.example.chronometer.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
public class ChronometerApp extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chronometer);
final Chronometer myChronometer = (Chronometer)findViewById(R.id.my_chronometer);
Button buttonStart = (Button)findViewById(R.id.buttonstart);
Button buttonStop = (Button)findViewById(R.id.buttonstop);
Button buttonReset = (Button)findViewById(R.id.buttonreset);
buttonStart.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myChronometer.start();
}});
buttonStop.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myChronometer.stop();
}});
buttonReset.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myChronometer.setBase(SystemClock.elapsedRealtime());
}});
}
}
你需要一个变量来跟踪发生的时间
从计时表启动后就通过了
请参阅更多信息:您需要定义一个变量,该变量包含计时器停止时经过的时间
timeWhenStopped = chronometer.getBase() - SystemClock.elapsedRealtime();
然后,当您再次启动时,设置计时器加上停止时的时间
chronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
要重置计时器,只需使用
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.stop();
timeWhenStopped = 0;
也许你需要添加一个额外的变量来定义计时器是否在运行,你只需要记住时间,它已经变了,例如,timeWhenStopped。然后,每次当你启动计时表时,你不是从0开始,而是从几秒钟开始?可以通过方法setBase设置。这里有3个按钮,包括启动、暂停和重新启动。祝你好运
public class MainActivity extends Activity {
/** Called when the activity is first created. */
long timeWhenStopped = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button butStart = (Button) findViewById(R.id.button1);
final Button butStop = (Button) findViewById(R.id.button2);
final Button butReset = (Button) findViewById(R.id.button3);
final Chronometer Mchronometer = (Chronometer) findViewById(R.id.chronometer1);
butStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) { Mchronometer.setBase(SystemClock.elapsedRealtime()
+timeWhenStopped);
Mchronometer.start();
}
});
butStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
timeWhenStopped = Mchronometer.getBase() - SystemClock.elapsedRealtime();
Mchronometer.stop();
}
});
butReset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Mchronometer.setBase(SystemClock.elapsedRealtime());
Mchronometer.stop();
timeWhenStopped = 0;
}
});
}
@fabzy的代码有效,但算术逻辑无效,这可能会导致问题
mtimeownstopped
应该是一个正数(计时器上经过的时间量),但在fabzy的设置中,它总是负数。如果您使用mtimeownstopped
数字进行除运行计时器以外的任何操作,如比较、显示等,则会产生不同
以下代码与减法运算相反。我还为计时器是否正在运行添加了可选布尔值:
private void resumeTimer() {
mTimer.setBase(SystemClock.elapsedRealtime() - mTimeWhenStopped);
mTimer.start();
mTimerIsRunning = true;
}
private void stopTimer() {
mTimer.stop();
mTimeWhenStopped = SystemClock.elapsedRealtime() - mTimer.getBase();
mTimerIsRunning = false;
}
private void resetTimer() {
mTimer.stop();
mTimer.setBase(SystemClock.elapsedRealtime());
mTimeWhenStopped = 0;
mTimerIsRunning = false;
}
我为此制作了一个
PauseAbleChrometer
课程
import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;
public class PausableChronometer extends Chronometer {
private long timeWhenStopped = 0;
public PausableChronometer(Context context) {
super(context);
}
public PausableChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void start() {
setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
super.start();
}
@Override
public void stop() {
super.stop();
timeWhenStopped = getBase() - SystemClock.elapsedRealtime();
}
public void reset() {
stop();
setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
}
public long getCurrentTime() {
return timeWhenStopped;
}
public void setCurrentTime(long time) {
timeWhenStopped = time;
setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
}
}
在“暂停”和“开始”中使用getBase可能重复所经过的时间和挫折?挫折():设置计数计时器参照的时间。elapsedRealtime():返回启动后的毫秒。这不正确。停止时的时间必须为正-反向计时表底座,延时实时才能正常工作。有关正确答案,请参阅