Android發(fā)送驗證碼倒計時自定義View

要點
1.通過計時器Timer TimerTask 設(shè)置每秒執(zhí)行一次遞減任務(wù)
2.通過handler 在UI線程中修改秒數(shù)
3.設(shè)置開關(guān)躏将,對Timer TimerTask 停止消除任務(wù)
4.設(shè)置初始按鈕樣式,和倒計時按鈕樣式侄旬。(自行設(shè)置)

import android.os.Handler;  
import android.util.AttributeSet;  
import android.widget.Button;  
import java.util.Timer;  
import java.util.TimerTask;  
  
/** 
 * 倒計時時間控件 
 */  
public class TimeButton extends Button {  
    private long length = 60 * 1000;// 倒計時長度,這里給了默認(rèn)60秒  
    private String text_after = "s";  
    private String text_before = "獲取驗證碼";  
  
  
    private Timer timer;  
    private TimerTask timerTask;  
    private long time;  
  
    public TimeButton(Context context) {  
        super(context);  
    }  
  
    public TimeButton(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    public TimeButton(Context context, AttributeSet attrs, int defStyleAttr) {  
        super(context, attrs, defStyleAttr);  
    }  
  
    /** 
     * 倒計時 
     */  
   private Handler handler = new Handler() {  
        public void handleMessage(android.os.Message msg) {  
            TimeButton.this.setText(time / 1000 + text_after);  
            time -= 1000;  
            if (time < 0) {  
                TimeButton.this.setEnabled(true);  
                TimeButton.this.setText(text_before);  
                clearTimer();  
            }  
        }  
    };  
  
    private void initTimer() {  
        time = length;  
        if(timer==null) {  
            timer = new Timer();  
        }  
        if(timerTask==null) {  
            timerTask = new TimerTask() {  
                @Override  
                public void run() {  
                    handler.sendEmptyMessage(0x01);  
                }  
            };  
        }  
    }  
  
    private void clearTimer() {  
        try {  
            if (timerTask != null) {  
                timerTask.cancel();  
                timerTask = null;  
            }  
            if (timer != null) {  
                timer.cancel();  
                timer = null;  
            }  
            //還原樣式  
            setBackgroundResource(R.drawable.shape_btn_round_corner_orange);  
            setTextColor(getResources().getColor(R.color.common_background_white));  
        }catch (Exception e){  
  
        }  
    }  
  
    /** 
     * 開始倒計時 
     */  
    public void start_count_down(){  
        this.setEnabled(false);  
        initTimer();  
        timer.schedule(timerTask, 0, 1000);  
        //設(shè)置倒計時樣式  
        setBackgroundResource(R.drawable.shape_common_radius_corner_line);  
        setTextColor(getResources().getColor(R.color.common_top_bar_color_in_orange));  
    }  
  
    /** 
     * 停止倒計時 
     */  
    public void stop_count_down(){  
        clearTimer();  
    }  
  
  
    /** 
     * 設(shè)置到計時長度 
     * 
     * @param length 
     *            時間 默認(rèn)毫秒 
     * @return 
     */  
    public TimeButton setLength(long length) {  
        this.length = length;  
        return this;  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撒顿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌突想,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猾担,居然都是意外死亡袭灯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門绑嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稽荧,“玉大人,你說我怎么就攤上這事工腋∫陶桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵擅腰,是天一觀的道長蟋恬。 經(jīng)常有香客問我,道長趁冈,這世上最難降的妖魔是什么歼争? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮渗勘,結(jié)果婚禮上沐绒,老公的妹妹穿的比我還像新娘。我一直安慰自己旺坠,他們只是感情好乔遮,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著价淌,像睡著了一般申眼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝉衣,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天括尸,我揣著相機(jī)與錄音,去河邊找鬼病毡。 笑死濒翻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啦膜。 我是一名探鬼主播有送,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼僧家!你這毒婦竟也來了雀摘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤八拱,失蹤者是張志新(化名)和其女友劉穎阵赠,沒想到半個月后涯塔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡清蚀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年匕荸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枷邪。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榛搔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出东揣,到底是詐尸還是另有隱情践惑,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布救斑,位于F島的核電站童本,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脸候。R本人自食惡果不足惜穷娱,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望运沦。 院中可真熱鬧泵额,春花似錦、人聲如沸携添。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烈掠。三九已至羞秤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間左敌,已是汗流浹背瘾蛋。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留矫限,地道東北人哺哼。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像叼风,于是被迫代替她去往敵國和親取董。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容