Android自定义倒计时按钮

本文详细介绍了如何在Android中创建一个自定义的倒计时Button,包括代码示例和关键方法如setLenght、setBeforeText和onClick的使用。通过继承Button并实现OnClickListener,实现实时倒计时功能。
摘要由CSDN通过智能技术生成

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

效果

img

img

代码:

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;
}
}
}

更多Android进阶指南 可以扫码 解锁 《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2024最新Android中高级面试题汇总+解析,告别零offer

4.企业级Android音视频开发学习路线+项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战+360°全方面性能调优

10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值