最近做用户绑定,需要用到倒计时的一个Button,就花点时间封装了一个,非常简单,效果图如下:

1.TimeButton 自定义倒计时Button

package com.example.timebutton;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.View;import android.widget.Button;/** * 时间控制的Button *  * @author xue * @time 2014-02-26 10:53:55 *  */public class TimeButton extends Button {private int time, tempTime;private String subText;public final int TIME_START = 0x10;public final int TIME_REDUCE = 0x11;public final int TIME_END = 0x12;public final String GONING_TAG = "TAG_GONGING";public final String END_TAG = "TAG_END";public TimeButton(Context context) {super(context);// TODO Auto-generated constructor stub}public TimeButton(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public TimeButton(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {case TIME_START:setTag(GONING_TAG);break;case TIME_REDUCE:setText("(" + tempTime-- + ")" + "秒后重新" + subText);break;case TIME_END:setTag(END_TAG);setText(subText);tempTime = time;break;default:break;}}};/** * 继承OnclickListener,用于设置Onclick监听器时向上转型 *  * @author xue *  */public class TimeOnclickListener implements OnClickListener {// 用于判断是否在倒计时完成后执行一系列动作public boolean END_TAG = true;@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (v.getTag() != null && v.getTag().equals(GONING_TAG)) {END_TAG = false;return;}setText(tempTime + "");new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub// 开始倒计时handler.sendEmptyMessage(TIME_START);while (tempTime >= 0) {// 正在倒计时handler.sendEmptyMessage(TIME_REDUCE);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 倒计时结束END_TAG = true;handler.sendEmptyMessage(TIME_END);}}).start();}}/** * 设置倒计时时间 *  * @param time */public void setTime(int time) {this.time = time;this.tempTime = time;}/** * 设置倒计时过程中的文字 *  * @param subText */public void setSubText(String subText) {this.subText = subText;}}

  2.MainActivity

package com.example.timebutton;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.Toast;/** * 主界面 *  * @author xue * @time 2014-02-26 15:34:51 *  */public class MainActivity extends Activity {private TimeButton time;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();setListener();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}private void initView() {time = (TimeButton) findViewById(R.id.timebutton);time.setTime(60); // 设置倒计时时间time.setSubText("发送");}private void setListener() {time.setOnClickListener(time.new TimeOnclickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubsuper.onClick(v);if (this.END_TAG) // 如果不加判断,则每次点击Button都会执行下面这句话Toast.makeText(MainActivity.this, "已发送!", 1000).show();}});}}

  

OK,一个简单的倒计时Button就完了。

更多相关文章

  1. android实现文件下载功能
  2. Android(安卓)-- Vibrator
  3. Android(安卓)TimeUtils-时间相关工具类
  4. Android(安卓)动画整理(3.0以上)
  5. Android(安卓)TimeUtil
  6. Android时间倒计时
  7. Android手势控制实现缩放、移动图片
  8. Android常用控件-DatePicker以及对话框的两种使用方法
  9. android   CheckBox 用法

随机推荐

  1. Android拍照、录像、录音代码范例
  2. android 让 webView 中的超链接失效
  3. android Bitmap getByteCount和getRowByt
  4. Android视频播放项目总结之 使用Android
  5. android实现 服务器功能
  6. android的PowerManager和PowerManager.Wa
  7. android MAT使用
  8. Android(安卓)3.0 http网络请求
  9. 关于用eclipse开发android经常出现R异常
  10. Android获取传感器列表