大家应该都知道,android中的组件Chronometer的常用方法:start、stop和setBase.
stop()这个方法比较恼人,因为调用他只是不刷新时间罢了,但是在后台时间依然是继续走的,后来发现这个是因为base的原因.
笔者本来想在start的时候记录下当前的SystemClock.elapsedRealtime()
然后在暂停的时候在记录此时的SystemClock.elapsedRealtime()
然后相减,得到差值,在继续时间的时候用当前的SystemClock.elapsedRealtime()减去差值
但是这样做会有偏差和问题....笔者很不解,了解的朋友希望可以给予帮助.
这是笔者的第一次尝试:sub和now和prev在继承Activity的子类中定义 初始值为0.
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity.this.start.setEnabled(false);
MainActivity.this.pause.setEnabled(true);
sub=now-prev;
if(sub>0){
System.out.println("相隔停止:"+sub/1000);
MainActivity.this.ct.setBase(SystemClock.elapsedRealtime()-sub);
}
MainActivity.this.ct.start(); //开始计时
prev=SystemClock.elapsedRealtime();
System.out.println("按下开始:"+prev);
}
});
pause.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity.this.start.setEnabled(true);
MainActivity.this.pause.setEnabled(false);
MainActivity.this.ct.stop(); //停止计时 但是后台还在运行不符合要求 修改一下
now=SystemClock.elapsedRealtime();
System.out.println("按下停止:"+now);
}
});
思路很简单:记下原来的时间差,然后再继续计时的时候设置一下base,base为当前的时间减去那个时间差。(用System.currentTimeMillis()代替给now和prev赋值也不行,知道的希望可以告诉我原因,谢谢)
思路相同,以上程序无法使用,然后想干脆直接得到时间罢了
ct.setFormat("计时:%s");
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity.this.start.setEnabled(false);
MainActivity.this.pause.setEnabled(true);
if(sub>0){
System.out.println("相隔停止(秒):"+sub/1000);
MainActivity.this.ct.setBase(SystemClock.elapsedRealtime()-sub);
}else if(sub==-1){
MainActivity.this.ct.setBase(SystemClock.elapsedRealtime());
}
MainActivity.this.ct.start(); //开始计时
}
});
pause.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity.this.start.setEnabled(true);
MainActivity.this.pause.setEnabled(false);
MainActivity.this.ct.stop(); //停止计时 但是后台还在运行不符合要求 修改一下
String regex=MainActivity.this.ct.getFormat().replaceAll("[(%s)]", "");
String now=MainActivity.this.ct.getText().toString().replaceAll(regex,"");
String[] time=now.split(":");
sub=Integer.valueOf(time[0])*60+Integer.valueOf(time[1]);
sub*=1000;
}
});
上网找了找 没发现什么 现在还是初学android 希望有其他想法大家可以谈一下
分享到:
相关推荐
2. 错误处理:对异常情况进行处理,如防止负时间显示或在无网络等情况下仍能正常运行。 3. 恢复功能:当应用被后台或者设备重启后,计时器能够恢复到之前的状态。 4. 保存和加载状态:利用SharedPreferences或SQLite...
Chronometer有两个主要属性:`android:format` 和 `android:base`。`format` 属性定义了时间显示的格式,如 "HH:mm:ss" 或者 "mm:ss.SSS"。默认情况下,它会显示从系统启动到当前时间的秒数。`base` 属性则可以设置...
在Android开发中,Chronometer是Android SDK提供的一种用于显示时间计时的组件,它能够以正向或逆向的方式进行计时。本项目文件“ClockDemo”旨在帮助开发者理解和实现一个基本的计时器应用,特别关注逆向计时功能,...
在Android开发中,Chronometer是用于显示倒计时或者计时的一种组件,它非常适合于创建简单的时间追踪应用,比如秒表。本教程将详细介绍如何利用Chronometer实现计时器的开始、停止和重置功能。 首先,让我们了解...
然而,当我们需要倒计时功能时,`Chronometer`并不能直接满足需求。本篇文章将介绍如何通过继承`Chronometer`来封装一个倒计时类,实现倒计时功能。 首先,我们来看一下XML布局文件中的部分代码: ```xml ...
Android系统提供了Chronometer组件,但它默认并不支持倒计时至0后的暂停功能。因此,我们常常需要自定义ChronometerView来满足这些需求。 `ChronometerView`是基于`TextView`的一个扩展,它实现了倒计时、暂停、...
Chronometer位于`android.widget`包下,它继承自TextView,因此它可以像普通文本视图一样在布局文件中定义。在XML布局文件中,你可以这样创建一个Chronometer: ```xml <Chronometer android:id="@+id/chronometer...
通过以上内容,我们对Android中的`Chronometer`控件有了深入的理解,掌握了如何设置其格式、开始和停止计时以及监听时间变化等核心操作。在实际项目中灵活运用这些知识,能够创建出符合用户需求的计时功能。
在Android开发中,自定义控件是提升应用用户体验和界面个性化的重要手段。本文将深入探讨如何创建一个Android倒计时控件,即`CountDownView`。倒计时控件通常用于活动促销、验证码发送等场景,能为用户提供明确的...
Chronometer直接继承自TextView,因此它不仅具备文本显示的功能,还能实时更新显示计时的结果。本篇文章将通过一个简单的示例来讲解如何在Android应用中使用Chronometer。 首先,我们需要创建一个新的Activity,名...
通过扩展TextView并实现内部计时机制,我们可以轻松地控制倒计时的开始、暂停和停止,并能灵活地进行界面更新和事件响应。这不仅提高了代码的可复用性,还使得倒计时功能更加符合用户的使用习惯和体验。
在Android开发中,创建一个简易秒表应用是一个常见的任务,涉及到对用户界面(UI)组件的熟练使用,尤其是`Button`按钮控件和`Chronometer`计时器控件。`MAChronometer.zip`文件中可能包含了一个实现此类功能的示例...
本教程将详细介绍如何在Android环境中实现这些功能,包括开始计时、开始倒计时、暂停、继续以及重置。 首先,我们需要了解Android中的两种主要时间处理类:`CountDownTimer`和`Chronometer`。`CountDownTimer`适用...
在Android开发中,计时器(Chronometer)是一个非常实用的组件,用于显示从特定基值开始流逝的时间。...使用Chronometer不仅可以提高代码的可读性和可维护性,还能避免因手动处理时间计算和线程同步而引入的复杂性。
4. **暂停和重新启动Chronometer** 当需要暂停计时器时,可以调用`stop()`方法;如果想继续计时,使用`start()`方法。这允许用户在需要时暂停和恢复计时。 5. **设置Chronometer格式** Chronometer的显示格式可以...
在Android开发中,`MediaPlayer`、`SeekBar`和`Chronometer`是三个常见的组件,它们在音频和视频播放中起到至关重要的作用。本篇将详细阐述这三个组件的使用及其交互方式。 `MediaPlayer`是Android提供的一个类,...
`elapsedRealtime()`返回的是系统启动至今的时间(以毫秒为单位),这样可以确保即使应用被后台或系统暂停,倒计时仍能正确继续。 `btnStop`的点击事件中,调用`myChronometer.stop()`停止计时。当计时器停止后,...
【实验内容详解】 本次实验是关于Android开发的控件布局实践,主要涵盖了多个常见的...通过这次实验,你不仅将巩固Android控件和布局的基础知识,还能提高实际编程能力,为后续更复杂的Android应用开发打下坚实基础。
5. **暂停与恢复**:在暂停和恢复功能中,我们需要记录下暂停时的时间点,以便恢复时能够准确计算出总时间。这通常通过在`pause_button`点击事件中保存`SystemClock.elapsedRealtime()`值并用其调整`Chronometer`的...