当前位置: 首页 > 面试题库 >

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

全流觞
2023-03-14
问题内容

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

所以我希望能够以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它已经具有基本的秒表功能。您需要稍微处理一下它的特性,但是一旦了解了它的工作原理,就可以使它完成您想做的事情并不难。

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

  1. “实时”,例如现在根据我的计算机时钟,在英国是上午11:23。但是,如果我的计算机联系时间服务器并被告知时间错误,或者我正带着笔记本电脑旅行并越过时区边界,则这种情况可能会改变。使用此功能会对您的秒表造成严重破坏,因为测得的时间可能随时更改。

  2. “自启动以来经过的时间”,这是自手机开机以来的毫秒数。这个数字与它的实时性没有任何关系,但是它的行为可以完全预测。这就是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您可能想要的。解决这个问题并不难,但我会留给您解决!:)



 类似资料:
  • 问题内容: 我在用Java重置小时数时遇到问题。对于给定的日期,我要将小时设置为00:00:00。 这是我的代码: 问题是,有时时间是,有时是时间,当我查询数据库中保存的实体以及查询的实际实体时间(存储的实际时间)失败时。 我知道! 我正在使用AppEngine。这是Appengine错误,问题还是其他问题?还是取决于其他因素? 问题答案: 使用另一个常数代替,使用。 使用0-11(与AM / P

  • 问题内容: 我通过传递ipAddress来对方法进行调用,它会返回ipAddress的位置,例如国家/地区,城市等。因此,我试图查看每个调用花费的时间。因此,我在调用方法之前设置了start_time,在调用之后设置了end_time。 所以有时候我得到的差为0 。并且resp包含有效的响应。 因此,这意味着有时需要0毫秒才能恢复响应。任何建议将不胜感激。 问题答案: 试试这个

  • 问题内容: 字段定义 二传手 有谁知道如何将“零日期”转换为适当的值?因为我有错误: 即使我像这样设置“默认”字段和设置器: 我仍然会有同样的问题。 问题答案: 在这里,我将大胆猜测您正在使用MySQL :-)它使用“零日期”作为特殊占位符 -不幸的是,JDBC默认情况下无法处理它们。 解决方案是将“ zeroDateTimeBehavior = convertToNull”指定为MySQL连接的

  • 问题内容: 字段定义 二传手 有谁知道如何将“零日期”转换为适当的值?因为我有错误: 即使我像这样设置“默认”字段和设置器: 我仍然会有同样的问题。 问题答案: 在这里,我将做出一个疯狂的猜测,即您正在使用MySQL :-)它使用“零日期”作为特殊的占位符 -不幸的是,默认情况下JDBC无法处理它们。 解决方案是将“ zeroDateTimeBehavior = convertToNull”指定为

  • 问题内容: 我想每毫秒更改一次计时器,但是它没有按预期工作。 结果是 计时器以毫秒为单位更改为100(00:100),然后更改为01:00 = 40真实秒 邓肯方法: 结果:456680125.54539第一次打印 问题答案: 正如Martin在评论中所说,计时器的分辨率为50-100毫秒(0.05至0.1秒)。尝试以短于该间隔的时间运行计时器将无法获得可靠的结果。另外,计时器不是实时的。它们取决

  • 我有这个列表,我想在我的屏幕上按照时间[“time in”]对它进行排序。有人知道我该怎么做吗?