android 转圈倒计时,Android:旋转后如何还原已停止计时码表的...

我对计时表类以及如何适应方向变化也有类似的疑问.尽管有几个有用的帖子和示例,但我发现没有一个解决了整个问题.

这是一个非常有用的帖子,这里是Android_Chronometer pause,它有助于说明需要保存elapsedTime以便恢复计时.

但是,本文并未讨论如何使Chronometer幸免于Android生命周期方向变化.在计时器运行与暂停之间,经过时间的处理方式略有不同.

这是我将所有内容组合在一起的原因-在一个不错的班级中,暂停,恢复,重置,保持正常的状态:

public class ChronometerWithPause extends Chronometer {

private long timeWhenStopped = 0;

private boolean isRunning = false;

private final String getTimeKey() {

return "KEY_TIMER_TIME" + getId();

}

private final String getIsRunningKey() {

return "KEY_TIMER_RUNNING" + getId();

}

public ChronometerWithPause(Context context) {

super(context);

}

public ChronometerWithPause(Context context, AttributeSet attrs) {

super(context, attrs);

}

public ChronometerWithPause(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

@Override

public void start() {

setBase(SystemClock.elapsedRealtime() - timeWhenStopped);

isRunning = true;

super.start();

}

@Override

public void stop() {

isRunning = false;

timeWhenStopped = SystemClock.elapsedRealtime() - getBase();

super.stop();

}

public void reset() {

stop();

isRunning = false;

setBase(SystemClock.elapsedRealtime());

timeWhenStopped = 0;

}

public boolean isRunning() {

return isRunning;

}

public long getCurrentTime() {

return timeWhenStopped;

}

public void setCurrentTime(long time) {

timeWhenStopped = time;

setBase(SystemClock.elapsedRealtime() - timeWhenStopped);

}

public void saveInstanceState(Bundle outState) {

if (isRunning) {

timeWhenStopped = SystemClock.elapsedRealtime() - getBase();

}

outState.putLong(getTimeKey(), getCurrentTime());

outState.putBoolean(getIsRunningKey(), isRunning());

}

public void restoreInstanceState(Bundle inState) {

isRunning = inState.getBoolean(getIsRunningKey());

setCurrentTime(inState.getLong(getTimeKey()));

timeWhenStopped = SystemClock.elapsedRealtime() - getBase();

if (isRunning) {

super.start();

}

}

}

请注意,您可以像这样在onSaveInstanceState()和onCreate()中使用它:

protected void onSaveInstanceState(Bundle outState) {

...

timer.saveInstanceState(outState);

...

然后在onCreate中,您可以使用以下方法还原计时器功能:

if (savedInstanceState != null) {

// . . .

timer.restoreInstanceState(savedInstanceState);

// . . .

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值