我想创建一个递增秒表,如秒表。

所以我希望能够以00:01的格式显示秒和分钟...

Google只提供24小时制的示例,我想知道是否有人能让我开始做我想做的示例或教程?

编辑:

到目前为止,这是我在Android中使用Chronometer的方式

在onCreate()中

    secondsT = 0;
    elapsedTimeBeforePause = 0;

    stopWatch.start();
    startTime = SystemClock.elapsedRealtime();
    stopWatch.setBase(elapsedTimeBeforePause);

     stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                //countUp is a long declared earlier
                secondsT = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (secondsT / 60) + ":" + (secondsT % 60);
                //textGoesHere is a TextView
                ((TextView)findViewById(R.id.time)).setText(asText);
            }
     });

在onDestroy()中
@Override
public void onDestroy() {

    inCall = false;
    elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();

    super.onDestroy();
}

上面的代码可以编译运行,但是TextView永远不会增加,它始终保持为0,有人可以看到原因吗?

最佳答案

我假设您不知道Android的Chronometer-它已经具有基本的秒表功能。您需要稍微处理一下它的特性,但是一旦了解了它的工作原理,就可以使它完成您想做的事情并不难。

有几种方法可以在手机上计算时间,但是主要的两种方法是:

  • “实时”,例如现在根据我的计算机时钟,它在英国的上午11:23。但是,如果我的计算机联系时间服务器并被告知时间错误,或者我正带着笔记本电脑旅行并越过时区边界,则这种情况可能会改变。使用此功能会对您的秒表造成严重破坏,因为测得的时间可能随时发生变化。
  • “自启动以来耗时”,这是自手机开机以来的毫秒数。这个数字与它的实时性没有任何关系,但是它将以完全可预测的方式表现。这就是Android Chronometer所使用的。
  • Chronometer本质上是一个“计数”计时器,用于将当前SystemClock.elapsedRealtime()与为其基准时间设置的elapsedRealtime()进行比较。两者之间的差除以1000,就是自计时器启动以来的秒数。但是,如果您停止计时器然后再次启动它,则会得到与直觉相反的结果-计时器将显示耗时,就好像它从未停止过一样。这是因为您需要调整其基准时间以考虑其停止的时间。这很容易做到:
    // When you're stopping the stopwatch, use this
    // This is the number of milliseconds the timer was running for
    elapsedTimeBeforePause = SystemClock.elapsedRealtime() - timer.getBase();
    
    // When you're starting it again:
    timer.setBase(SystemClock.elapsedRealtime() - elapsedTimeBeforePause);
    

    编辑:这是基本秒表的完整代码,它在TextView中显示您的时间,而不是在XML文件中声明的Chronometer小部件。
    public class TestProject extends Activity {
        TextView textGoesHere;
        long startTime;
        long countUp;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            Chronometer stopWatch = (Chronometer) findViewById(R.id.chrono);
            startTime = SystemClock.elapsedRealtime();
    
            textGoesHere = (TextView) findViewById(R.id.textGoesHere);
            stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
                @Override
                public void onChronometerTick(Chronometer arg0) {
                    countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                    String asText = (countUp / 60) + ":" + (countUp % 60);
                    textGoesHere.setText(asText);
                }
            });
            stopWatch.start();
        }
    }
    

    在您的main.xml中,您需要拥有这个
    <Chronometer android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/chrono"
        android:visibility="gone"/>
    

    毫无疑问,有一种方法可以使Chronometer正常工作而不在XML文件中声明它,但是构造函数Chronometer stopwatch = new Chronometer(this);不能正常工作。

    上面的代码以非常基本的方式显示了耗时。例如,如果只经过了5秒钟,它将显示0:5而不是您可能想要的0:05。解决这个问题并不难,但我会留给您解决! :)

    09-25 18:16