`

让android下的Chronometer能正常暂停和继续

 
阅读更多

大家应该都知道,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 楼 fair_jm 2014-01-03  
hety163 写道
同求。请问博主解决这个问题了么?希望能得到指教一二。

后来没用到了 安卓开发也有段时间没做了
1 楼 hety163 2014-01-03  
同求。请问博主解决这个问题了么?希望能得到指教一二。

相关推荐

    实现了暂停功能以及初始值为0的chronometer计时器

    2. 错误处理:对异常情况进行处理,如防止负时间显示或在无网络等情况下仍能正常运行。 3. 恢复功能:当应用被后台或者设备重启后,计时器能够恢复到之前的状态。 4. 保存和加载状态:利用SharedPreferences或SQLite...

    Android Chronometer 使用实例

    Chronometer有两个主要属性:`android:format` 和 `android:base`。`format` 属性定义了时间显示的格式,如 "HH:mm:ss" 或者 "mm:ss.SSS"。默认情况下,它会显示从系统启动到当前时间的秒数。`base` 属性则可以设置...

    android下的Chronometer应用--正逆向计时器

    在Android开发中,Chronometer是Android SDK提供的一种用于显示时间计时的组件,它能够以正向或逆向的方式进行计时。本项目文件“ClockDemo”旨在帮助开发者理解和实现一个基本的计时器应用,特别关注逆向计时功能,...

    Chronometer实现计时器的开始停止重置功能

    在Android开发中,Chronometer是用于显示倒计时或者计时的一种组件,它非常适合于创建简单的时间追踪应用,比如秒表。本教程将详细介绍如何利用Chronometer实现计时器的开始、停止和重置功能。 首先,让我们了解...

    Android利用Chronometer实现倒计时功能

    然而,当我们需要倒计时功能时,`Chronometer`并不能直接满足需求。本篇文章将介绍如何通过继承`Chronometer`来封装一个倒计时类,实现倒计时功能。 首先,我们来看一下XML布局文件中的部分代码: ```xml ...

    Android自定义Chronometer实现短信验证码秒表倒计时功能.docx

    Android系统提供了Chronometer组件,但它默认并不支持倒计时至0后的暂停功能。因此,我们常常需要自定义ChronometerView来满足这些需求。 `ChronometerView`是基于`TextView`的一个扩展,它实现了倒计时、暂停、...

    Chronometer 计时器组件的用法

    Chronometer位于`android.widget`包下,它继承自TextView,因此它可以像普通文本视图一样在布局文件中定义。在XML布局文件中,你可以这样创建一个Chronometer: ```xml <Chronometer android:id="@+id/chronometer...

    Android控件之Chronometer(定时器).doc

    通过以上内容,我们对Android中的`Chronometer`控件有了深入的理解,掌握了如何设置其格式、开始和停止计时以及监听时间变化等核心操作。在实际项目中灵活运用这些知识,能够创建出符合用户需求的计时功能。

    Android倒计时控件

    在Android开发中,自定义控件是提升应用用户体验和界面个性化的重要手段。本文将深入探讨如何创建一个Android倒计时控件,即`CountDownView`。倒计时控件通常用于活动促销、验证码发送等场景,能为用户提供明确的...

    Android编程之计时器Chronometer简单示例

    Chronometer直接继承自TextView,因此它不仅具备文本显示的功能,还能实时更新显示计时的结果。本篇文章将通过一个简单的示例来讲解如何在Android应用中使用Chronometer。 首先,我们需要创建一个新的Activity,名...

    Android自定义Chronometer实现短信验证码秒表倒计时功能

    通过扩展TextView并实现内部计时机制,我们可以轻松地控制倒计时的开始、暂停和停止,并能灵活地进行界面更新和事件响应。这不仅提高了代码的可复用性,还使得倒计时功能更加符合用户的使用习惯和体验。

    MAChronometer.zip

    在Android开发中,创建一个简易秒表应用是一个常见的任务,涉及到对用户界面(UI)组件的熟练使用,尤其是`Button`按钮控件和`Chronometer`计时器控件。`MAChronometer.zip`文件中可能包含了一个实现此类功能的示例...

    android正计时和倒计时

    本教程将详细介绍如何在Android环境中实现这些功能,包括开始计时、开始倒计时、暂停、继续以及重置。 首先,我们需要了解Android中的两种主要时间处理类:`CountDownTimer`和`Chronometer`。`CountDownTimer`适用...

    android之计时器(Chronometer)的使用以及常用的方法

    在Android开发中,计时器(Chronometer)是一个非常实用的组件,用于显示从特定基值开始流逝的时间。...使用Chronometer不仅可以提高代码的可读性和可维护性,还能避免因手动处理时间计算和线程同步而引入的复杂性。

    秒表计时器,可以实现计时功能

    4. **暂停和重新启动Chronometer** 当需要暂停计时器时,可以调用`stop()`方法;如果想继续计时,使用`start()`方法。这允许用户在需要时暂停和恢复计时。 5. **设置Chronometer格式** Chronometer的显示格式可以...

    MediaPlayer与SeekBar和Chronometer的简单交互

    在Android开发中,`MediaPlayer`、`SeekBar`和`Chronometer`是三个常见的组件,它们在音频和视频播放中起到至关重要的作用。本篇将详细阐述这三个组件的使用及其交互方式。 `MediaPlayer`是Android提供的一个类,...

    Android实战教程第四十篇之Chronometer实现倒计时

    `elapsedRealtime()`返回的是系统启动至今的时间(以毫秒为单位),这样可以确保即使应用被后台或系统暂停,倒计时仍能正确继续。 `btnStop`的点击事件中,调用`myChronometer.stop()`停止计时。当计时器停止后,...

    Android控件布局实验1

    【实验内容详解】 本次实验是关于Android开发的控件布局实践,主要涵盖了多个常见的...通过这次实验,你不仅将巩固Android控件和布局的基础知识,还能提高实际编程能力,为后续更复杂的Android应用开发打下坚实基础。

    安卓Android源码——秒表源码.zip

    5. **暂停与恢复**:在暂停和恢复功能中,我们需要记录下暂停时的时间点,以便恢复时能够准确计算出总时间。这通常通过在`pause_button`点击事件中保存`SystemClock.elapsedRealtime()`值并用其调整`Chronometer`的...

Global site tag (gtag.js) - Google Analytics