標籤:vda nlp dad nba hl7 activity tab 決定 pmp
近期在做擷取驗證碼的功能。考慮到優良的使用者體驗,決定製作一個擁有倒計時提示的Button按鈕,在網上查了一些資料,非常是簡單的就能實現。我寫了一個小Demo,大家能夠應用到自己的項目中。
一、代碼
1.activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btn_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="擷取驗證碼" /></RelativeLayout>
2.MainActivity.java:
package com.example.timebutton;import android.app.Activity;import android.os.Bundle;import android.os.CountDownTimer;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;public class MainActivity extends Activity {private Button mTimeButton;private TimeCount time;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);mTimeButton = (Button) findViewById(R.id.btn_time);time = new TimeCount(60000, 1000);mTimeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {time.start();}});}/** * 繼承倒計時類 * * @author TML * */class TimeCount extends CountDownTimer {/** * 構造方法 * * @param millisInFuture * 總倒計時間長度 毫秒 * @param countDownInterval * 倒計時間隔 */public TimeCount(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}@Overridepublic void onTick(long millisUntilFinished) {mTimeButton.setEnabled(false);mTimeButton.setText(millisUntilFinished / 1000 + "秒");}@Overridepublic void onFinish() {// 計時結束mTimeButton.setEnabled(true);mTimeButton.setText("又一次擷取");}}}
二、運行執行個體:
總結: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 ()
啟動倒計時
謝謝,喜歡的朋友關注我!
Android實戰簡易教程-第四十一槍(顯示倒計時的Button-適用於擷取驗證碼)