Hyena-倒计时按钮

作者: KnifeStone | 来源:发表于2017-05-02 17:59 被阅读0次
Hyena.jpg

AndroidUtilCode这样优秀的库替我管理了工具类,大大提高了我工作的效率,现在工具类终于解放了双手,这得益于AndroidUtilCode,每当构建新项目,只需要一行代码就可以把需要的工具类引用进来,而且这个库还保持着活跃的更新,更多的人在参与进去,开源的力量让AndroidUtilCode变得愈加强大,也使更多的android开发者收益,再次感谢。

Hyena鬣狗快速开发库也是借鉴了前辈的思路,想成为一个简单好用,保持活力,受大家喜欢的开源库。
核心为快速开发,定位小巧精悍,内容简单精致,整合常用的自定义ViewBase类通用词典

图例是比较常见的需求了
* 点击获得验证码 
* 按钮不可点击且进入倒计时 
* 时间结束恢复状态。

使用鬣狗就可以很快速方便的实现这个功能,详细的使用示例

获得验证码.gif

源码 CountDownButton.java

public class CountDownButton extends AppCompatButton {

    //默认总时长
    private int mMillisInFutureDefault = 60 * 1000;
    //默认计时间隔
    private int mCountDownIntervalDefault = 1000;

    //系统api 倒计时定时器
    private CountDownTimer mCountDownTimer;
    //按钮文本
    private String mBtnStr;

    public CountDownButton(Context context) {
        super(context);
    }

    public CountDownButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CountDownButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 开始倒计时(默认总时长、默认计时间隔
     */
    public void onStart() {
        onStart(mMillisInFutureDefault, mCountDownIntervalDefault);
    }

    /**
     * 开始倒计时(自定义总时长、默认计时间隔
     *
     * @param millisInFuture 总时长
     */
    public void onStart(long millisInFuture) {
        onStart(millisInFuture, mCountDownIntervalDefault);
    }

    /**
     * 开始倒计时
     *
     * @param millisInFuture    总时长
     * @param countDownInterval 计时间隔
     */
    public void onStart(long millisInFuture, final long countDownInterval) {
        //如果在执行倒计时 退出
        if (isCountDown()) {
            return;
        }
        //保存当前按钮文字
        mBtnStr = getText().toString();
        if (countDownInterval == 0) {
            throw new UnsupportedOperationException("Exception:0 作为计时间隔是个糟糕的选择");
        }
        mCountDownTimer = new CountDownTimer(millisInFuture, countDownInterval) {

            private String result;

            @Override
            public void onTick(long millisUntilFinished) {
                result = millisUntilFinished / countDownInterval + "";
                setText(result);
                //设置为不可用
                if (isEnabled()) {
                    setEnabled(false);
                }
            }

            @Override
            public void onFinish() {
                onFinishCountDown();
            }
        };
        mCountDownTimer.start();
    }

    /**
     * 停止倒计时
     */
    public void onStop() {
        if (!isCountDown()) {
            return;
        }
        mCountDownTimer.cancel();
        onFinishCountDown();
    }

    /**
     * 结束倒计时
     */
    private void onFinishCountDown() {
        if (TextUtils.isEmpty(mBtnStr)) {
            mBtnStr = "";
        }
        setText(mBtnStr);
        mCountDownTimer = null;
        setEnabled(true);
    }

    /**
     * 是否在倒计时中
     *
     * @return true:是 false:否
     */
    public boolean isCountDown() {
        return mCountDownTimer != null;
    }

}

更多功能请前往Github查看,传送门: Hyena鬣狗快速开发库

相关文章

网友评论

    本文标题:Hyena-倒计时按钮

    本文链接:https://www.haomeiwen.com/subject/pcdazttx.html