计时器以字符计数

时间:2012-12-21 09:31:33

标签: android

我刚刚在我的应用程序中添加了一个计时器,它有一种奇怪的行为。而不是数字计数它在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" />

的onCreate

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

启动

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

回调

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

2 个答案:

答案 0 :(得分: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年的垃圾,而且还可以。但

答案 1 :(得分:1)

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

chronometer.setBase(SystemClock.elapsedRealtime());

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

试试这个,看看是否能解决您的问题......

根据@Ef Es评论更新..