Android实战简易教程<四十一>(显示倒计时的Button-适用于获取验证码)

本文介绍了一种在Android应用中实现带有倒计时功能的Button的方法。通过使用CountDownTimer类,可以轻松创建一个在点击后开始倒计时,并显示剩余时间的Button组件。

最近在做获取验证码的功能,考虑到优良的用户体验,决定制作一个拥有倒计时提示的Button按钮,在网上查了一些资料,很是简单的就能实现,我写了一个小Demo,大家可以应用到自己的项目中。

一、代码

1.activity_main.xml:

[html]  view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <Button  
  7.         android:id="@+id/btn_time"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="获取验证码" />  
  11.   
  12. </RelativeLayout>  

2.MainActivity.java:

[java]  view plain copy
  1. package com.example.timebutton;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.CountDownTimer;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.view.Window;  
  9. import android.widget.Button;  
  10.   
  11. public class MainActivity extends Activity {  
  12.     private Button mTimeButton;  
  13.     private TimeCount time;  
  14.   
  15.     @Override  
  16.     protected void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  19.         setContentView(R.layout.activity_main);  
  20.         mTimeButton = (Button) findViewById(R.id.btn_time);  
  21.         time = new TimeCount(600001000);  
  22.         mTimeButton.setOnClickListener(new OnClickListener() {  
  23.   
  24.             @Override  
  25.             public void onClick(View v) {  
  26.                 time.start();  
  27.   
  28.             }  
  29.         });  
  30.   
  31.     }  
  32.   
  33.     /** 
  34.      * 继承倒计时类 
  35.      *  
  36.      * @author TML 
  37.      *  
  38.      */  
  39.     class TimeCount extends CountDownTimer {  
  40.   
  41.         /** 
  42.          * 构造方法 
  43.          *  
  44.          * @param millisInFuture 
  45.          *            总倒计时长 毫秒 
  46.          * @param countDownInterval 
  47.          *            倒计时间隔 
  48.          */  
  49.         public TimeCount(long millisInFuture, long countDownInterval) {  
  50.             super(millisInFuture, countDownInterval);  
  51.   
  52.         }  
  53.   
  54.         @Override  
  55.         public void onTick(long millisUntilFinished) {  
  56.             mTimeButton.setEnabled(false);  
  57.             mTimeButton.setText(millisUntilFinished / 1000 + "秒");  
  58.         }  
  59.   
  60.         @Override  
  61.         public void onFinish() {// 计时结束  
  62.             mTimeButton.setEnabled(true);  
  63.             mTimeButton.setText("重新获取");  
  64.   
  65.         }  
  66.   
  67.     }  
  68.   
  69. }  

二、运行实例:





总结:CountDownTimer类的用法:

结构

继承关系

public abstract class CountDownTimer extends Object

        

java.lang.Object

android.os.CountDownTimer

 

类概述

定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发onTick方法),下面的例子显示在一个文本框中显示一个30s倒计时:

 new CountdownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {

         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);

     }

     public void onFinish() {

         mTextField.setText("done!");

     }

 }.start(); 

onTick的调用是同步的,保证这次调用不会在之前调用完成前发生。这里的同步机制主要是用来:onTick的实现需要很多时间执行比倒计时间隔更重要的事情。

 

构造函数

         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 ()

         启动倒计时


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值