以00:00格式创建递增计时器,以秒为单位?

Don*_*rty 9 java android timer clock increment

我想创建一个递增的第二个计时器,如秒表.

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

谷歌只提供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);
            }
     });
Run Code Online (Sandbox Code Playgroud)

在onDestroy()

@Override
public void onDestroy() {

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

    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

上面的编译和运行但TextView永远不会增加,它始终保持为0,任何人都可以看到为什么?

Ste*_*ley 29

我假设你不知道Android Chronometer- 它已经有一个基本的秒表功能.你需要稍微努力解决它的特点,但是一旦你理解了它的工作原理就不难做到你想做的事情.

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

  1. "实时",如现在根据我的电脑时钟,它是英格兰上午11:23.但是,如果我的计算机与时间服务器联系并被告知时间错误,或者我使用笔记本电脑旅行并越过时区边界,则可能会发生这种情况.使用它会对你的秒表造成严重破坏,因为测量的时间可能随时发生变化.

  2. "自启动后经过的时间",即自手机开机以来的毫秒数.这个数字与它的实际时间没有任何关系,但它将以完全可预测的方式表现.这就是Android Chronometer所使用的.

Chronometer本质上是一种"向上计数"定时器,比较当前SystemClock.elapsedRealtime()靠在elapsedRealtime(),将其设置FOT其基准时间.除以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);
Run Code Online (Sandbox Code Playgroud)

编辑:这是基本秒表的完整代码,它在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的main.xml中你需要这个

<Chronometer android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/chrono"
    android:visibility="gone"/>
Run Code Online (Sandbox Code Playgroud)

毫无疑问,如果没有在XML文件中声明它,可以让计时器工作,但构造函数Chronometer stopwatch = new Chronometer(this);不能正常工作.

上面的代码以非常基本的方式显示经过的时间.例如,如果只有5秒钟,它将显示0:5而不是0:05您可能想要的.修复这不难做,但我会留下让你锻炼!:)