Android自定义倒计时按钮

所属分类: 软件编程 / Android 阅读数: 38
收藏 0 赞 0 分享

本文实例为大家分享了Android自定义倒计时按钮的具体代码,供大家参考,具体内容如下

效果

代码:

package com.dylan.frame.ui;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 自定义倒计时按钮
 * <p/>
 *
 * @author Dylan
 *   <p/>
 *   [佛祖保佑 永无BUG]
 *   Created by Dylan on 2015/11/5 0005.
 */
public class CountdownButton extends Button implements View.OnClickListener {
 private long lenght = 60 * 1000;//默认倒计时时间;
 private long time;//倒计时时长
 private Timer timer;//开始执行倒计时
 private TimerTask timerTask;//每次倒计时执行的任务
 private String beforeText = "点击获取验证码";
 private String afterText = "秒后重新获取";
 private OnClickListener onClickListener;//按钮点击事件
 /**
  * 更新显示的文本
  */
 private Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   super.handleMessage(msg);
   CountdownButton.this.setText(time / 1000 + afterText);
   time -= 1000;
   if (time < 0) {
    CountdownButton.this.setEnabled(true);

    CountdownButton.this.setText(beforeText);

    clearTimer();
   }
  }
 };


 public CountdownButton(Context context) {
  super(context);
  this.setText(beforeText);
  setOnClickListener(this);
 }

 public CountdownButton(Context context, AttributeSet attrs) {
  super(context, attrs);
  setOnClickListener(this);
 }

 public CountdownButton(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  setOnClickListener(this);
 }

 /**
  * 清除倒计时
  */
 private void clearTimer() {
  if (timerTask != null) {
   timerTask.cancel();
   timerTask = null;
  }
  if (timer != null) {
   timer.cancel();
   timer = null;
  }
 }

 /**
  * 设置倒计时时长
  *
  * @param lenght 默认毫秒
  */
 public void setLenght(long lenght) {
  this.lenght = lenght;
 }

 /**
  * 设置未点击时显示的文字
  *
  * @param beforeText
  */
 public void setBeforeText(String beforeText) {
  this.beforeText = beforeText;
 }

 /**
  * 设置未点击后显示的文字
  *
  * @param beforeText
  */
 public void setAfterText(String afterText) {
  this.afterText = afterText;
 }

 /**
  * 点击按钮后的操作
  *
  * @param v
  */
 @Override
 public void onClick(View v) {
  if (onClickListener != null) {
   onClickListener.onClick(v);
  }
  initTimer();
  this.setText(time / 1000 + afterText);
  this.setEnabled(false);
  timer.schedule(timerTask, 0, 1000);
 }

 /**
  * 初始化时间
  */
 private void initTimer() {
  time = lenght;
  timer = new Timer();
  timerTask = new TimerTask() {
   @Override
   public void run() {
    handler.sendEmptyMessage(1);
   }
  };
 }

 /**
  * 设置监听按钮点击事件
  *
  * @param onclickListener
  */
 @Override
 public void setOnClickListener(OnClickListener onclickListener) {
  if (onclickListener instanceof CountdownButton) {
   super.setOnClickListener(onclickListener);

  } else {
   this.onClickListener = onclickListener;
  }

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多