引导页倒计时(获取验证码)BUTTON

本文介绍了一个自定义的倒计时按钮组件的实现方法。该组件通过继承Button并利用CountDownTimer实现倒计时功能,支持自定义倒计时间隔及总时长,并提供了开始、取消倒计时的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class CountDownButton extends Button {
    private long countDownInterval;
    private long millisInFuture;

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

        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        TypedArray typedArray = context.getResources().obtainAttributes(attrs, R.styleable.CountDownButton);
        countDownInterval = typedArray.getInteger(R.styleable.CountDownButton_countDownInterval, 1) * 1000;
        millisInFuture = typedArray.getInteger(R.styleable.CountDownButton_millisInFuture, 5) * 1000;
        typedArray.recycle();
        this.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mListener != null) {
                    mListener.onClick(view);
                }
            }
        });
    }

    public void setCountDownInterval(long countDownInterval) {
        this.countDownInterval = countDownInterval;
    }

    public void setMillisInFuture(long millisInFuture) {
        this.millisInFuture = millisInFuture;
    }

    /**
     * 开启倒计时
     */
    public void start() {
        if (timer == null) {
            timer = new MyCount(millisInFuture, countDownInterval);
        }
        timer.start();
    }

    /**
     * 取消倒计时
     */
    public void cancel() {
        if (timer != null)
            timer.cancel();
    }


    private MyCount timer;

    private class MyCount extends CountDownTimer {

        public MyCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {
            if (mListener != null) {
                mListener.onTick(millisUntilFinished);
            }
        }

        private static final String TAG = "MyCount";

        @Override
        public void onFinish() {
            if (mListener != null) {
                mListener.onFinish();
            }
        }
    }

    private OnCountDownTimeListener mListener;

    public void setonCountDownTimeListener(OnCountDownTimeListener listener) {
        this.mListener = listener;
    }

    /**
     * 倒计时监听接口
     */
    public interface OnCountDownTimeListener {
        /**
         * 按钮监听事件
         *
         * @param view
         */
        void onClick(View view);

        /**
         * CountDownTimer的onTick事件
         *
         * @param millisUntilFinished
         */
        void onTick(long millisUntilFinished);

        /**
         * 倒计时完成事件
         */
        void onFinish();
    }

}

<declare-styleable name="CountDownButton">
    <attr name="millisInFuture" format="integer"/>
    <attr name="countDownInterval" format="integer"/>
</declare-styleable>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值