用特定时间初始化计时器 JAVA
Initialize chronometer with specific time JAVA
我有这个时间秒
(例如秒=2796)
long seconds =2796;
long millis = seconds * 1000;
所以我希望我的计时码表从 46 分 36 秒开始
我试过这样做:
chronometer.setBase(myMillis);
long seconds =2796;
long stoptime_millis = seconds * 1000;
long elapsedMillis = SystemClock.elapsedRealtime() - stoptime_millis;
customChronometer.setBase(elapsedMillis);
customChronometer.start();
但是不行。
使用此代码,我的计时开始于 00:00
我尝试了几种方法,但似乎无济于事
例如这个 Android Chronometer start with defined value
这是我的 CustomChronometer
public class CustomChronometer extends Chronometer {
public int msElapsed;
public boolean isRunning = false;
public CustomChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomChronometer(Context context) {
super(context);
}
public int getMsElapsed() {
return msElapsed;
}
public void setMsElapsed(int ms) {
setBase(getBase() - ms);
msElapsed = ms;
}
@Override
public void start() {
super.start();
setBase(SystemClock.elapsedRealtime() - msElapsed);
isRunning = true;
}
@Override
public void stop() {
super.stop();
if (isRunning) {
msElapsed = (int) (SystemClock.elapsedRealtime() - this.getBase());
}
isRunning = false;
}
}
当您调用 start() 方法时,您将再次调用 setBase。您的 msElapsed 很可能为 0,因此您总是在重置 Base。这样 customChronometer.setBase(elapsedMillis);正在被忽略。
所以像这样更改您的代码:
@Override public void start() {
super.start();
//setBase(SystemClock.elapsedRealtime() - msElapsed); - remove this line.
isRunning = true;
}
我有这个时间秒
(例如秒=2796)
long seconds =2796;
long millis = seconds * 1000;
所以我希望我的计时码表从 46 分 36 秒开始
我试过这样做:
chronometer.setBase(myMillis);
long seconds =2796;
long stoptime_millis = seconds * 1000;
long elapsedMillis = SystemClock.elapsedRealtime() - stoptime_millis;
customChronometer.setBase(elapsedMillis);
customChronometer.start();
但是不行。
使用此代码,我的计时开始于 00:00
我尝试了几种方法,但似乎无济于事 例如这个 Android Chronometer start with defined value
这是我的 CustomChronometer
public class CustomChronometer extends Chronometer {
public int msElapsed;
public boolean isRunning = false;
public CustomChronometer(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomChronometer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomChronometer(Context context) {
super(context);
}
public int getMsElapsed() {
return msElapsed;
}
public void setMsElapsed(int ms) {
setBase(getBase() - ms);
msElapsed = ms;
}
@Override
public void start() {
super.start();
setBase(SystemClock.elapsedRealtime() - msElapsed);
isRunning = true;
}
@Override
public void stop() {
super.stop();
if (isRunning) {
msElapsed = (int) (SystemClock.elapsedRealtime() - this.getBase());
}
isRunning = false;
}
}
当您调用 start() 方法时,您将再次调用 setBase。您的 msElapsed 很可能为 0,因此您总是在重置 Base。这样 customChronometer.setBase(elapsedMillis);正在被忽略。
所以像这样更改您的代码:
@Override public void start() {
super.start();
//setBase(SystemClock.elapsedRealtime() - msElapsed); - remove this line.
isRunning = true;
}