您的位置:首页 > 移动开发 > Android开发

Android 倒计时功能的实现(CountDownTimer)

2015-05-22 08:57 851 查看

CountDownTimer

结构

继承关系

public abstract class CountDownTimer extends Object

java.lang.Object

android.os.CountDownTimer

构造函数

public CountDownTimer (long millisInFuture, long countDownInterval)

参数

millisInFuture 从开始调用start()到倒计时完成并onFinish()方法被调用的毫秒数。(译者注:倒计时时间,单位毫秒)

countDownInterval 接收onTick(long)回调的间隔时间。(译者注:单位毫秒)

公共方法

public final void cancel ()

取消倒计时(译者:取消后,再次启动会重新开始倒计时)

public abstract void onFinish ()

倒计时完成时被调用

public abstract void onTick (long millisUntilFinished)

固定间隔被调用

参数

millisUntilFinished 倒计时剩余时间。

public synchronized final CountDownTimer start ()

启动倒计时

说明:

xml:

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

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

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/time111"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="hello world" />

<Button

android:id="@+id/start111"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="开始计时" />

</LinearLayout>

Count_DownTimer.java

package activity;

import cn.lindl.ninjiaking.R;

import android.app.Activity;

import android.os.Bundle;

import android.os.CountDownTimer;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

public class Count_DownTimer extends Activity

{

TextView time;

CountDownTimer mTimer;

Button start;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.countdowntimer);

time = (TextView) findViewById(R.id.time111);

start = (Button) findViewById(R.id.start111);

start.setOnClickListener(new View.OnClickListener()

{

@Override

public void onClick(View v)

{

// mTimer.start();

MyCount mc = new MyCount(30000, 1000);

mc.start();

}

});

}

/* 定义一个倒计时的内部类 */

class MyCount extends CountDownTimer

{

public MyCount(long millisInFuture, long countDownInterval)

{

super(millisInFuture, countDownInterval);

}

@Override

public void onFinish()

{

time.setText("finish");

}

@Override

public void onTick(long millisUntilFinished)

{

time.setText("请等待30秒(" + millisUntilFinished / 1000 + ")...");

}

}

}

CountDownTimer的间隔为1s,我们在onTick方法里面休眠了1.2s,所以log出来发现打印间隔变成了2s,即中间一次onTick方法没有被执行(不会在之前一次调用完成前被调用)

主要是重写onTick和onFinsh这两个方法,onFinish()中的代码是计时器结束的时候要做的事情;onTick(Long m)中的代码是你倒计时开始时要做的事情,参数m是直到完成的时间,构造方法MyCount()中的两个参数中,前者是倒计的时间数,后者是倒计时onTick事件响应的间隔时间,都是以毫秒为单位。例如要倒计时30秒,每秒中间间隔时间是1秒,两个参数可以这样MyCount(30000,1000)。 将后台线程的创建和Handler队列封装成为了一个方便的类调用。

当你想取消的时候使用mc.cancel()方法就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: