Android自定義倒計時按鈕
本文實(shí)例為大家分享了Android自定義倒計時按鈕的具體代碼,供大家參考,具體內(nèi)容如下
效果


代碼:
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;//默認(rèn)倒計時時間;
private long time;//倒計時時長
private Timer timer;//開始執(zhí)行倒計時
private TimerTask timerTask;//每次倒計時執(zhí)行的任務(wù)
private String beforeText = "點(diǎn)擊獲取驗(yàn)證碼";
private String afterText = "秒后重新獲取";
private OnClickListener onClickListener;//按鈕點(diǎn)擊事件
/**
* 更新顯示的文本
*/
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;
}
}
/**
* 設(shè)置倒計時時長
*
* @param lenght 默認(rèn)毫秒
*/
public void setLenght(long lenght) {
this.lenght = lenght;
}
/**
* 設(shè)置未點(diǎn)擊時顯示的文字
*
* @param beforeText
*/
public void setBeforeText(String beforeText) {
this.beforeText = beforeText;
}
/**
* 設(shè)置未點(diǎn)擊后顯示的文字
*
* @param beforeText
*/
public void setAfterText(String afterText) {
this.afterText = afterText;
}
/**
* 點(diǎn)擊按鈕后的操作
*
* @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);
}
};
}
/**
* 設(shè)置監(jiān)聽按鈕點(diǎn)擊事件
*
* @param onclickListener
*/
@Override
public void setOnClickListener(OnClickListener onclickListener) {
if (onclickListener instanceof CountdownButton) {
super.setOnClickListener(onclickListener);
} else {
this.onClickListener = onclickListener;
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 啟動另一個App/apk中的Activity實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 啟動另一個App/apk中的Activity實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android使用MediaRecorder實(shí)現(xiàn)錄像功能
這篇文章主要為大家詳細(xì)介紹了Android使用MediaRecorder實(shí)現(xiàn)錄像功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
Android編程實(shí)現(xiàn)通知欄進(jìn)度條效果的方法示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)通知欄進(jìn)度條效果的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android通知欄進(jìn)度條效果的功能、布局相關(guān)實(shí)現(xiàn)方法與操作注意事項,需要的朋友可以參考下2018-02-02
自定義toast外形,多次點(diǎn)擊不會總是彈出toast的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄远xtoast外形,多次點(diǎn)擊不會總是彈出toast的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Android實(shí)現(xiàn)雙向滑動特效的實(shí)例代碼
這篇文章主要介紹了Android實(shí)現(xiàn)雙向滑動特效的實(shí)例代碼,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧2018-05-05
android RecyclerView的一些優(yōu)化點(diǎn)介紹
大家好,本篇文章主要講的是android RecyclerView的一些優(yōu)化點(diǎn)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Android應(yīng)用的Material設(shè)計中圖片的相關(guān)處理指南
這篇文章主要介紹了Android應(yīng)用的Material設(shè)計中圖片的相關(guān)處理指南,除了介紹新的方法外文中還給出了一些設(shè)計標(biāo)準(zhǔn)樣例僅供參考,需要的朋友可以參考下2016-04-04
android LabelView實(shí)現(xiàn)標(biāo)簽云效果
這篇文章主要為大家詳細(xì)介紹了android LabelView實(shí)現(xiàn)標(biāo)簽云效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Android 解決dialog彈出時無法捕捉Activity的back事件問題
這篇文章主要介紹了Android 解決dialog彈出時無法捕捉Activity的back事件問題的相關(guān)資料,需要的朋友可以參考下2016-11-11

