关于Chronometer(计时器)暂停的问题

问题描述:

当通过stop()方法实现计时器暂停时,在通过start()方法继续计时的时候,会出现计时器显示的时间不是暂停前的时间。

问题分析:

查看官方API文档可以发现:

publicvoid stop ()

Added in API
level 1

Stop countingup. This does not affect the base as set from setBase(long),
just the viewdisplay. This stops the messages to the handler, effectively releasing resourcesthat would be held as the chronometer is running, via start().

stop()方法只是停止刷新计时器的时间显示,而并没有真正停止计时。当调用stop()方法后,计时器还在计时,只是不再刷新界面罢了。

那样怎么才生让计时器在恢复计时的时候能够从暂停前的时间继续计时呢?

下面有两种方法可以解决这个问题:

方法一:

开始和恢复计时:

//将时间设置为暂停时的时间
chronometer.setBase(convertStrTimeToLong(chronometer.getText().toString()));
chronometer.start();//开始计时
 

暂停计时:

chronometer.stop();//停止计时

获取暂停前显示的时间并将其转换为long类型的时间:

/**
 * 将String类型的时间转换成long,如:12:01:08
 * @param strTime String类型的时间
 * @return long类型的时间
 * */
protected long convertStrTimeToLong(String strTime) {
    // TODO Auto-generated method stub
    String []timeArry=strTime.split(":");
    long longTime=0;
    if (timeArry.length==2) {//如果时间是MM:SS格式
        longTime=Integer.parseInt(timeArry[0])*1000*60+Integer.parseInt(timeArry[1])*1000;
    }else if (timeArry.length==3){//如果时间是HH:MM:SS格式
        longTime=Integer.parseInt(timeArry[0])*1000*60*60+Integer.parseInt(timeArry[1])
              *1000*60+Integer.parseInt(timeArry[0])*1000;
    }
    return SystemClock.elapsedRealtime()-longTime;
}
 

方法二:

private Chronometer recordChronometer;
private long recordingTime = 0;// 记录下来的总时间
public void onRecordStart() {
    recordChronometer.setBase(SystemClock.elapsedRealtime() - recordingTime);// 跳过已经记录了的时间,起到继续计时的作用
    recordChronometer.start();
}
public void onRecordPause() {
    recordChronometer.stop();
    recordingTime = SystemClock.elapsedRealtime()- recordChronometer.getBase();// 保存这次记录了的时间
}
public void onRecordStop() {
    recordingTime = 0;
    recordChronometer.setBase(SystemClock.elapsedRealtime());
} 

关于Chronometer(计时器)暂停的问题

时间: 2024-08-02 09:44:57

关于Chronometer(计时器)暂停的问题的相关文章

Chronometer计时器控件

Chronometer ·计时器控件 ·从一个默认的时间或你指定的时间开始计时,并按指定格式显示 ·主要属性: -android:format - ·主要方法: -setFormat(String format) -start()/stop() -setBase(long base) xml布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&qu

从零开始学android&lt;chronometer计时器组件.三十二.&gt;

计时器来计算每个运动员所消耗的时间等,而在Android系统之中,这种计时的功能就可以使用Chronometer组件,此类的继承结构如下所示: 2java.lang.Object ? android.view.View ? android.widget.TextView ? android.widget.Chronometer 常见的方法 1 public Chronometer(Context context) 构造 创建Chronometer对象 2 public long getBase(

【Android】标签页、计时器、单选按钮、复选按钮

写一个小程序把安卓程序中的几个基础组件的基本用法串联起来. 如下图所示: 在安卓程序中,一个计时器,一直在不断地计时,每10秒弹出一个提示. MainActivity被一个标签页分成两部分,一部分,有单选按钮与复选按钮,最后有一个提交按钮, 结果在另一个标签页中显示. 用这个程序来说明安卓中标签页.计时器.单选按钮.复选按钮的用法. 首先贴上res\values\string.xml中,各个组件的字符串. <?xml version="1.0" encoding="ut

iOS 中计时器的使用心得

1. NSTimer 使用NSTimer开启的计时器,如果拖动scrollView会导致计时器暂停,并且锁屏的时候必须暂停计时器,否则抛异常. 暂停计时器方法 [_sTimer setFireDate:[NSDate distantFuture]]; 恢复计时器方法 [_sTimer setFireDate:[NSDate distantPast]]; _sTimer = [NSTimer scheduledTimerWithTimeInterval:interval target:timerT

Android---25---Chronometer计时器

Chronometer 计时器 它提供了一个android:format属性,用于指定计时器的计时格式 setBase (long base):设置起始时间 setFormat (String format):设置显示时间的格式 start():开始计时 stop ():停止计时 setOnchronometerTickListener():为计时器绑定时间监听器,当计时器改变时触发该监听器 计时20s,当时间到了则停止计时. MainActivity.java: import android.

Android学习笔记总结

第一步: Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序 搭建 Android 的开发环境,以及写一个简单的示例程序 · 在 Windows 下搭建 Android 开发环境 · Android 项目的目录结构说明 · 写一个简单的 Hello World 程序 一.在 Windows 下搭建 Android 开发环境 1.安装 JDK (Java Development Kit) http://download.java.ne

UI组件:TextView及其子类

TextView(文本框) 一.TextView作用类似于JLable用于在界面上显示文本  二.TextView没有边框,如果需要边框可以导入背景框的图片,背景框可以自定义为背景颜色渐变,四个角是圆角,边框图片可以在xml文件中定义,将文件放在drawable文件夹内. EditText(编辑框) 一.EditText是TextView的子类,可以接受用户的输入,并且可以指定用户的输入类型(inputType) Button(按钮) 一.Button生成一个按钮供用户点击触发Onclick事件

程序日志--ios“考反应扑克游戏”程序

交代一下我做程序的工具:mac os x虚拟机10.9.3         Xcode6         百度^-^         参考书iPhone30天精通 总结与经验,还有遇到的问题,都在程序里面写出来了,看着长,其实从头往下看10分钟就全都搞懂了,我的注释很"白话". //  ViewController.h //  12.1 // //  Created by 李迪 on 15-7-28. //  Copyright (c) 2015年 李迪. All rights res

从零开始学android&lt;AnalogClock与DigitalClock时钟组件.三十一.&gt;

这两个组件比较交单,大家看下会使用就行了 XML文件配置 <span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa