安卓開發之封裝顯示倒數計時按鈕控制元件

cxmscb發表於2016-08-05

實現倒數計時邏輯比較簡單,使用了CountDownTimer來計時(原始碼考慮了執行緒安全問題)。
對使用邏輯封裝成了一個自定義控制元件TimerButton。

原始碼:

public class TimerButton extends Button {


    private String afterText = "重發";
    private int ms = 10000;

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

    public TimerButton(Context context, AttributeSet attrs) {

        this(context,attrs,0);

    }

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

        TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.timerbutton);


        afterText = typedArray.getString(R.styleable.timerbutton_afterText);

        ms = typedArray.getInt(R.styleable.timerbutton_ms,10000);

        typedArray.recycle();

    }

    public void init(String afterText,int ms){


        this.afterText = afterText;
        this.ms = ms;

    }

    public void startTimer(){

        TimerButton.this.setEnabled(false);

        new CountDownTimer(ms+1000,1000){

            @Override
            public void onTick(long finish) {
                TimerButton.this.setText(finish/1000+" s");
            }


            @Override
            public void onFinish() {
                TimerButton.this.setEnabled(true);
                TimerButton.this.setText(afterText);
            }
        }.start();

    }

}

使用:

private TimerButton timerButton;

timerButton = (TimerButton) findViewById(R.id.timer_Button);

timerButton.setText("獲取驗證碼")
timerButton.init("重發",10000);

timerButton.setOnClickListener(new View.OnClickListener() {

       @Override
       public void onClick(View view) {

         timerButton.startTimer();

         //TODO YOURS

    //Toast.makeText(MainActivity.this,"TODO",Toast.LENGTH_SHORT).show();

     }

});

Github:TimerButton

相關文章