package com.example.materialtest.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.CountDownTimer; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class TimerButton extends Button implements OnClickListener { private static final String TAG = TimerButton.class.getSimpleName(); private String textFormat = "��%s�������"; private int time = 6000; private int period = 1000; private CharSequence experiodStr;// ��ʱ����ʾ������ private Drawable bgDrawe; private OnClickListener listener; private CountDownTimer countTimer; @SuppressLint("NewApi") public TimerButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } public TimerButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public TimerButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TimerButton(Context context) { super(context); init(); } private void init() { Log.d(TAG, "timer button init"); super.setOnClickListener(this); } @Override public void setOnClickListener(OnClickListener l) { this.listener = l; } @Override public void onClick(View v) { Log.d(TAG, "timer button clicked"); // Ĭ���¼��ص� if (null != listener) { listener.onClick(v); } // �ɵ�����������е���ʱ if (this.isClickable()) { this.setClickable(false); bgDrawe = getBackground(); setBackgroundColor(Color.GRAY); if (null == experiodStr) { experiodStr = getText(); } countTimer = new CountDownTimer(time, period) { @Override public void onTick(long millisUntilFinished) { setText(String.format(textFormat, millisUntilFinished / 1000)); } @Override public void onFinish() { setClickable(true); setText(experiodStr); setBackgroundDrawable(bgDrawe); } }.start(); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (null != countTimer) { countTimer.cancel(); } Log.d(TAG, "timer button onDetachedFromWindow"); } public String getTextFormat() { return textFormat; } public void setTextFormat(String textFormat) { this.textFormat = textFormat; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } public int getPeriod() { return period; } public void setPeriod(int period) { this.period = period; } public CharSequence getExperiodStr() { return experiodStr; } public void setExperiodStr(CharSequence experiodStr) { this.experiodStr = experiodStr; } }