自定义button创建一个类MyButton继承Button
重写里面的构造方法,一般用到的有两个
public MyButton(Context context) { super(context); }//这个构造方法在java代码中直接new MyButton的时候调用 public MyButton(Context context, AttributeSet attrs) { super(context, attrs); }//这个构造方法在xml中添加Mybuttom控件通过findViewByid获取对象的时候调用(attrs指的是属性)
public class MyButton extends Button {
int num = 5;//自定义一个num用于倒数 从5开始
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
if(what == 0){
setText(num+""); //当前button设置text可以直接setText
}else if(what == 1){
setText("点击重新发送验证码"); //倒数到0 之后 显示文字点击从新开始
setEnabled(true);//从新设置button可点击
num = 5; //重置数字
}
}
};
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void startConunt(){ //设置一个方法用于调用 开始计时
setEnabled(false); //当调用此方法开始计时的时候,设置button不可点击
final Timer timer = new Timer();//创建一个计时器对象,来进行计时
timer.schedule(new TimerTask() {
@Override
public void run() {
if (num == 0){
timer.cancel(); //如果num等于0 取消计时
handler.sendEmptyMessage(1);
return;
}
num--; //每隔1秒 num减1
handler.sendEmptyMessage(0); //因为timer在子线程中进行,所以不能渲染ui控件,需要用handler进行传值
}
},0,1000);
}
}
然后在Maintivity中获得MyButton对象,调用startCount()方法即可实现简单的点击倒数计时