您的位置:首页 > 其它

关于安卓如何实现计时器chronometer的暂停和继续计时功能

2014-06-08 13:36 507 查看
安卓的Chronometer组件的基本函数有setBase,设置基础计时点。暂停和继续计时关键是通过设置基础计时点来实现的。当用户点击暂停的时候获取Chronometer从开始到当前暂停所用的时间,即rangeTime=SystemClock.elapsedRealtime()-chronometer.getBase();当用户点继续计时的时候,重新setBase,获取当前点击的时间减去rangeTime即为要设置的Base时间,即chronometer.setBase(SystemClock.elapsedRealtime()-rangeTime);

对于Chronometer.setBase(long)方法,个人的理解是时间基点,比如

chronomer.setBase(SystemClock.elapsedRealtime()-rangeTime-2000);

此时就相当与从00:02开始重新计时,所以上面的rangeTime也可以理解为Chronometer的计时运行的时间,继续计时时就从上次的计时时间接着计时。

这是自己在熟悉Chronometer控件时,通过了解,想到如何实现暂停和继续计时的功能,网上也查过别人的论文,自己是个新手,有说不好或者说错的地方,请大家指导下。除了暂停和继续计时功能外,其余很大一部分是参考这篇文章的:http://mobile.51cto.com/aprogram-395278.htm

(参考:Android开发:Chronometer控件实现计时器2013-05-23
16:01 佚名 jizhuomi )

package com.book.b525;

import java.text.ChoiceFormat;

import android.app.Activity;

import android.app.ActionBar;

import android.app.AlertDialog;

import android.app.Fragment;

import android.content.DialogInterface;

import android.os.Bundle;

import android.os.SystemClock;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.Chronometer;

import android.widget.EditText;

import android.widget.Toast;

import android.os.Build;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

final Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer1);

Button btnStart = (Button) findViewById(R.id.btnStart);

Button btnStop = (Button) findViewById(R.id.btnStop);

Button btnRest = (Button) findViewById(R.id.btnReset);

final Button btnPC=(Button) findViewById(R.id.btnPC);

final EditText edtSetTime = (EditText) findViewById(R.id.setTimeEdit);

btnStart.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

System.out.println("--开始记时---");

rangeTime=0;

String ss = edtSetTime.getText().toString();

if (!(ss.equals("") && ss != null)) {

startTime = Integer.parseInt(edtSetTime.getText()

.toString());

}

// 设置开始讲时时间

chronometer.setBase(SystemClock.elapsedRealtime());

// 开始记时

chronometer.start();

}

});

//暂停或继续计时

btnPC.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO 自动生成的方法存根

if(!PAUSE)//暂停计时

{

btnPC.setText("继续");

//从开始计时计时器运行的时间差。。。。。关键

MainActivity.this.rangeTime=SystemClock.elapsedRealtime()-chronometer.getBase();

//Toast.makeText(MainActivity.this, "时间:"+rangeTime, Toast.LENGTH_SHORT).show();



chronometer.stop();

}

else //继续计时

{

btnPC.setText("暂停");

//设置计时器的基时间。。。。。关键

chronometer.setBase(SystemClock.elapsedRealtime()-rangeTime);

chronometer.start();



}

PAUSE=!PAUSE;

}

});

btnStop.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 停止

chronometer.stop();

}

});

// 重置

btnRest.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

chronometer.setBase(SystemClock.elapsedRealtime());

}

});

chronometer

.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {

@Override

public void onChronometerTick(Chronometer chronometer) {

// 如果开始计时到现在超过了startime秒

if (SystemClock.elapsedRealtime()

- chronometer.getBase() > startTime * 1000) {

chronometer.stop();

// 给用户提示

showDialog();

}

}

});

}

protected void showDialog() {

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setIcon(R.drawable.picture);

builder.setTitle("警告").setMessage("时间到")

.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

}

});

AlertDialog dialog = builder.create();

dialog.show();

}

private int startTime = 0;

private boolean PAUSE=false;

private long rangeTime;//

}

布局文件中:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@drawable/mybackground"

android:orientation="vertical" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dip"

android:orientation="horizontal" >

<TextView

android:id="@+id/textView1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="3"

android:gravity="center"

android:text="@string/setTimeText" />

<EditText

android:id="@+id/setTimeEdit"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:ems="10"

android:inputType="number" >

<requestFocus />

</EditText>

</LinearLayout>

<Chronometer

android:id="@+id/chronometer1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:textColor="#ff0000"

android:textSize="60sp" />

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"



android:orientation="horizontal" >

<Button

android:id="@+id/btnStart"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="开始" />

<Button

android:id="@+id/btnPC"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="暂停" />

<Button

android:id="@+id/btnStop"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="停止" />





<Button

android:id="@+id/btnReset"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="重置" />

</LinearLayout>

</LinearLayout>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐