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



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()方法就行了。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值