7

在我的应用程序中,我想显示一个计时器手表。当我通过谷歌搜索时,我在开发者网站上发现了一个名为 Chronometer 的选项。它看起来就像一个计时器手表。

当我单击开始按钮时,我希望计时器启动,当我单击暂停按钮时,计时器必须暂停,当我单击开始时,它必须从停止的时间开始。

但是在这个计时器中,它从 0 开始,当我在 1 分 10 秒点击暂停时,它会暂停。当我在 5 分钟后再次单击开始时,计时器从 6 分钟 10 秒开始计数,即使在暂停时计时器仍在运行,如何停止并在停止时恢复。

以下是我的计时器代码

Start = (Button)findViewById(R.id.widget306);
        Start.setOnClickListener(new View.OnClickListener() 
        {   
            @Override
            public void onClick(View v) 
            {
                chronometer.start();                
            }
        });

        Stop = (Button)findViewById(R.id.widget307);
        Stop.setOnClickListener(new View.OnClickListener() 
        {   
            @Override
            public void onClick(View v) 
            {
                  chronometer.stop();
            }
        });
    }
4

4 回答 4

28

对不起,但我自己找到了一个解决方案,它似乎更简单:

  1. 在您的活动中,声明一个成员变量(例如 lastPause)来记录您上次暂停的时间:

    private long lastPause;

  2. 启动你的定时器(假设你的定时器的变量是 crono):

    crono.setBase(SystemClock.elapsedRealtime());

    crono.start();

  3. 每次使用暂停计时器:

    lastPause = SystemClock.elapsedRealtime();

    crono.stop();

  4. 每次使用以下命令恢复计时器:

    crono.setBase(crono.getBase() + SystemClock.elapsedRealtime() - lastPause);

    crono.start();

我还没有精确地测试过精度,因为在我看来它似乎没问题:]

于 2011-06-26T17:06:25.240 回答
2

来自天文台文档

别再数了 这不会影响从 setBase(long) 设置的基数,只会影响视图显示。

我现在没有任何 android 开发环境,所以不能更多地调查它:(

编辑: 它是您基于代码的代码吗它似乎使用setBase到当前时间停止

于 2011-04-21T07:01:47.227 回答
1

我遇到了同样的问题,我使用以下代码修复了它:

chronometerInstance.setBase(SystemClock.elapsedRealtime());
chronometerInstance.stop();

这停止了​​我的计时器计数到 00:00。

于 2020-12-17T17:12:38.090 回答
0

以下作品创造奇迹:

final long lastPause = SystemClock.elapsedRealtime();
mChronometer.stop();

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity)
    .setCancelable(false)
    .setMessage("Stop chronometer while AlertDialog is asking something.")
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
            mChronometer.setBase(mChronometer.getBase() 
                + SystemClock.elapsedRealtime() 
                - lastPause);
            mChronometer.start();
        }
    });
alertDialogBuilder.create().show();

这个片段只是关于停止计时器并显示一个 AlertDialog。当对话框关闭时,计时器将从它的最后一个位置开始。

于 2015-04-27T17:34:13.007 回答