中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android封裝怎么實現短信驗證碼的獲取倒計時

發布時間:2023-03-13 14:35:19 來源:億速云 閱讀:260 作者:iii 欄目:開發技術

今天小編給大家分享一下Android封裝怎么實現短信驗證碼的獲取倒計時的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Android封裝怎么實現短信驗證碼的獲取倒計時

如圖所示的效果相信大家都不陌生,我們可以使用很多種方法去實現此效果,這里自己采用CountDownTimer定時器簡單封裝下此效果,方便我們隨時調用。

首頁先在attrs.xml中定義下所需的幾個屬性:

<resources>
    <declare-styleable name="CountDownButton">
        <attr name="millisinfuture" format="integer"/>
        <attr name="countdowninterva" format="integer"/>
        <attr name="normalColor" format="color"/>
        <attr name="countDownColor" format="color"/>
    </declare-styleable>
</resources>

下面是實現的具體代碼,很簡單的一種方式,通俗易懂:

/**
 * Created by xiaolong on 2018/1/12.
 */
@SuppressLint("AppCompatCustomView")
public class CountDownButton extends Button{
    //總時長
    private long millisinfuture;
    //間隔時長
    private long countdowninterva;
    //默認背景顏色
    private int normalColor;
    //倒計時 背景顏色
    private int countDownColor;
    //是否結束
    private boolean isFinish;
    //定時器
    private CountDownTimer countDownTimer;
    public CountDownButton(Context context) {
        this(context,null);
    }
    public CountDownButton(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }
    public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CountDownButton,defStyleAttr,0);
        //設置默認時長
        millisinfuture = (long) typedArray.getInt(R.styleable.CountDownButton_millisinfuture,60000);
        //設置默認間隔時長
        countdowninterva = (long)typedArray.getInt(R.styleable.CountDownButton_countdowninterva,1000);
        //設置默認背景色
        normalColor = typedArray.getColor(R.styleable.CountDownButton_normalColor,android.R.color.holo_blue_light);
        //設置默認倒計時 背景色
        countDownColor = typedArray.getColor(R.styleable.CountDownButton_countDownColor,android.R.color.darker_gray);
        typedArray.recycle();
        //默認為已結束狀態
        isFinish = true;
        //字體居中
        setGravity(Gravity.CENTER);
        //默認文字和背景色
        normalBackground();
        //設置定時器
        countDownTimer = new CountDownTimer(millisinfuture, countdowninterva) {
            @Override
            public void onTick(long millisUntilFinished) {
                //未結束
                isFinish = false;
                setText((Math.round((double) millisUntilFinished / 1000) - 1) + "秒");
                setBackgroundResource(countDownColor);
            }
            @Override
            public void onFinish() {
                //結束
                isFinish = true;
                normalBackground();
            }
        };
    }
    private void normalBackground(){
        setText("獲取驗證碼");
        setBackgroundResource(normalColor);
    }
    public boolean isFinish() {
        return isFinish;
    }
    public void cancel(){
        countDownTimer.cancel();
    }
    public void start(){
        countDownTimer.start();
    }
}

一個簡單的調用方式:

public class MainActivity extends AppCompatActivity {
    private CountDownButton countDownButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        countDownButton = ((CountDownButton) findViewById(R.id.countDownButton));
        countDownButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //這里判斷是否倒計時結束,避免在倒計時時多次點擊導致重復請求接口
                if (countDownButton.isFinish()) {
                    //發送驗證碼請求成功后調用
                    countDownButton.start();
                }
            }
        });
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (!countDownButton.isFinish()) {
            countDownButton.cancel();
        }
    }
}

以上就是“Android封裝怎么實現短信驗證碼的獲取倒計時”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衢州市| 元朗区| 凤山市| 玉树县| 中西区| 荥经县| 柳河县| 中宁县| 普兰店市| 汕尾市| 土默特左旗| 吉林市| 南木林县| 台中县| 林西县| 绍兴县| 诸暨市| 德清县| 呼和浩特市| 徐汇区| 淮北市| 安平县| 高雄县| 望谟县| 招远市| 乌拉特中旗| 灵石县| 林西县| 常德市| 泊头市| 库尔勒市| 高雄市| 华宁县| 界首市| 敦煌市| 大庆市| 桐梓县| 滦平县| 湖州市| 濮阳县| 镇远县|