Android - 获取计时器小部件的时间
如何从天文台表获取时间? 我尝试了 getText、getFormat、getBase 等,但它们都不起作用。
示例代码片段:
Chronometer t = (Chronometer)findViewById(R.id.toptime);
long time = SystemClock.elapsedRealtime()-t.getBase();
Log.d(null,"Was: "+time); //time is not the proper time for some reason - it is a random number between 0 and 50
t.setBase(SystemClock.elapsedRealtime());
t.start();
How to get the time from a Chronometer? I tried getText, getFormat, getBase, etc, but none of them could work.
Example code snippet:
Chronometer t = (Chronometer)findViewById(R.id.toptime);
long time = SystemClock.elapsedRealtime()-t.getBase();
Log.d(null,"Was: "+time); //time is not the proper time for some reason - it is a random number between 0 and 50
t.setBase(SystemClock.elapsedRealtime());
t.start();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您查看 Chronometer 类的源代码,您会发现它不会将经过的时间存储在字段中,而是在每次需要更新显示时在内部计算它。
然而,在你自己的代码中做同样的事情相对容易:
这假设你已经启动了你的时钟,如下所示:
这是一个完整的例子:
关于 Chronometer 的一个有点令人困惑的事情是,你不能真正将它用作秒表,开始、停止并再次重新启动。 当它运行时,它将始终显示自您上次重置以来所经过的时间,无论您在此期间停止了多少次和多长时间。 当它停止时,它只是停止更新显示。
如果您需要像秒表这样的东西,您必须对 Chronometer 进行子类化,或者使用 来源。
If you look at the source of the Chronometer class, you'll see that it doesn't store the elapsed time in a field and it calculates it internally every time it needs to update the display.
However it's relatively easy to do the same in your own code:
This assumes that you have started your clock something like this:
Here's a full example:
One somewhat confusing thing about Chronometer is that you can't really use it as a stopwatch that gets started, stopped and restarted again. When it's running, it will always show the time elapsed since you last reset it, no matter how many times and for how long you have stopped it in the meantime. When it is stopped, it simply stops updating the display.
If you need something like a stopwatch you'll have to subclass Chronometer or maybe create your own version using the source.
我发现这个例子非常有用,谢谢 nyenyec!
这是我关于如何将其变成真正的秒表功能而不需要子类化 Chronometer 的两分钱。 只需更改 mStartListener 方法来解析来自 mChronometer 的文本(毕竟它是从 TextView 派生的),计算毫秒,然后使用 setBase() 将基准时间重新调整为过去的时间量:
I found this example really useful, thanks nyenyec!
Here's my two cents on how to turn it into a real stopwatch function, without subclassing Chronometer. Just change the mStartListener method to parse the text from mChronometer (it's derived from TextView after all), calculate milliseconds, and use setBase() to readjust the base time to that amount of time in the past:
@nyenyec +1:这就是我最终得到的结果,同时使用没有子类的 nyenyec 的响应。
其中阈值是
@nyenyec +1: here is what i ended up with, while using nyenyec's response without a sub class.
where THRESHOLD is
回复有点晚了,但我今天想自己解决这个问题。 我最终只是解析了视图的文本:
因此使用 view.getText().toString() 调用 getSecondsFromDurationString 可以为您提供以秒为单位的总运行时间(我的应用程序是某种秒表,因此您可以暂停并恢复它)。
希望能帮助到你。
Somewhat late response, but I was trying to solve this myself today. I ended up just parsing the text of the view:
So calling getSecondsFromDurationString with view.getText().toString() gives you the total elapsed time in seconds (my application is some kind of stop watch, so you can pause it and resume it).
Hope it helps.
我的解决方案:
在onCreate中:
布局中有两个按钮,它们都调用starttimer方法(开始和停止)
My Solution:
In onCreate:
There are two buttons in the layout which both call the starttimer method (start and stop)