3

我刚刚在我的应用程序中添加了一个计时器,它的行为很奇怪。它不是用数字来计算,而是用 CHARS 来计算!例子:

00:00:00
00:00:0(
00:00:0)
00:00:0/
00:00:0*
00:00:0+
... LOOPS AFTER 10
00:00:00
00:00:0(
00:00:0)
00:00:0/
00:00:0*
00:00:0+

xml

        <Chronometer
            android:id="@+id/tracking_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/record_indicator"
            android:textColor="@color/tracking_time"
            android:textSize="14dip"
            android:textStyle="bold" />

创建

        mTrackingTime = (Chronometer)this.findViewById(R.id.tracking_time);
        mTrackingTime.setOnChronometerTickListener(this);

开始

    mTrackingTime.setBase(System.currentTimeMillis());
    mTrackingTime.start();

打回来

    @Override
    public void onChronometerTick(final Chronometer chronometer) {
    }
4

2 回答 2

2

这些字符出现在基数大于 时SystemClock.elapsedRealtime(),即自启动以来的毫秒数。

它显示此参数的结果:

SystemClock.elapsedRealtime() - base

默认值,或者如果您调用:

chronometer.setBase(SystemClock.elapsedRealtime());

然后计时器将从00:00

如果你打电话:

chronometer.setBase(SystemClock.elapsedRealtime() - 10000);

然后计时器将从00:10

如果你打电话:

chronometer.setBase(SystemClock.elapsedRealtime() + 10000);

然后计时器会画垃圾 10 秒,然后从00:00

所以如果你打电话:

chronometer.setBase(System.currentTimeMillis());

您应该期望看到垃圾大约 44 年,然后就可以了。

于 2014-04-26T20:24:55.223 回答
1

根据我的理解,需要Chronometer.setBase()基于elapsedRealTime的毫秒数。这意味着纪元毫秒不起作用。为了能够使用纪元毫秒,您必须调用Chronometer.setBase()如下:

chronometer.setBase(SystemClock.elapsedRealtime());

数学有效地将纪元毫秒转换为经过的实时毫秒。

试试这个,看看能不能解决你的问题......

根据@Ef Es 评论更新..

于 2012-12-21T10:20:31.513 回答