我想创建一个递增秒表,如秒表。
所以我希望能够以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
-它已经具有基本的秒表功能。您需要稍微处理一下它的特性,但是一旦了解了它的工作原理,就可以使它完成您想做的事情并不难。
有几种方法可以在手机上计算时间,但是主要的两种方法是:
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
。解决这个问题并不难,但我会留给您解决! :)