2012-12-21 109 views
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" /> 

的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) { 
    } 

回答

1

根據我的理解,Chronometer.setBase()希望基於elapsedRealTime毫秒。這意味着時代毫秒不起作用。爲了能夠使用毫秒爲單位,你必須調用Chronometer.setBase()像以下:

chronometer.setBase(SystemClock.elapsedRealtime()); 

數學有效轉換毫秒爲單位,以經過實時毫秒。

試試這個,看看是否能解決您的問題...

更新爲每@Ef居評論..

+0

它給了我一個巨大的不準確的數字:/另外,我不認爲它做我想從他那裏得到的,只是一個簡單的天文臺。 –

+1

它僅與ElapsedRealTime()一起工作。 –

2

這些字符出現在基地比SystemClock.elapsedRealtime()大,這是因爲啓動毫秒。

它顯示了這種說法的結果:

SystemClock.elapsedRealtime() - base 

默認,或者如果您致電:

chronometer.setBase(SystemClock.elapsedRealtime()); 

然後天文臺將從00:00

如果你調用start:

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

然後天文臺將從00:10

開始如果您撥打:

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

然後天文臺將利用垃圾爲10秒,比00:00

開始所以,如果你撥打:

chronometer.setBase(System.currentTimeMillis()); 

你應該期待看到大約44年的垃圾,而且它會沒事的。