以秒为单位以00:00格式创建递增计时器?

以秒为单位以00:00格式创建递增计时器?,第1张

以秒为单位以00:00格式创建递增计时器

我假设您不了解Android-

Chronometer
它已经具有基本的秒表功能。您需要稍微处理一下它的特性,但是一旦了解了它的工作原理,就可以使它完成您想做的事情并不难。

有几种方法可以在手机上计算时间,但主要有两种:

  1. “实时”,例如现在根据我的计算机时钟,在英国是上午11:23。但是,如果我的计算机联系时间服务器并被告知时间错误,或者我正带着笔记本电脑旅行并越过时区边界,则这种情况可能会改变。使用此功能会对您的秒表造成严重破坏,因为测得的时间可能随时更改。

  2. “自启动以来经过的时间”,这是自手机开机以来的毫秒数。这个数字与它的实时性没有任何关系,但是它的行为可以完全预测。这就是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 forelapsedTimeBeforePause = 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 = newChronometer(this);
无法正常工作。

上面的代码以非常基本的方式显示了经过的时间。例如,如果只经过了5秒钟,它将显示

0:5
而不是
0:05
您可能想要的。解决这个问题并不难,但我会留给您解决!:)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存