zoukankan      html  css  js  c++  java
  • Android倒计时Button

    最近做用户绑定,需要用到倒计时的一个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() {
    
    		@Override
    		public void handleMessage(Message msg) {
    			// TODO Auto-generated method stub
    			switch (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;
    
    		@Override
    		public void onClick(View v) {
    			// TODO Auto-generated method stub
    			if (v.getTag() != null && v.getTag().equals(GONING_TAG)) {
    				END_TAG = false;
    				return;
    			}
    			setText(tempTime + "");
    			new Thread(new Runnable() {
    
    				@Override
    				public 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 block
    							e.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;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		initView();
    		setListener();
    	}
    
    	@Override
    	public 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() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				super.onClick(v);
    				if (this.END_TAG) // 如果不加判断,则每次点击Button都会执行下面这句话
    					Toast.makeText(MainActivity.this, "已发送!", 1000).show();
    			}
    
    		});
    	}
    }
    

      

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

  • 相关阅读:
    SharePoint 2013 通过HttpModule 管理视图权限
    SharePoint 2013 内容部署报错
    SharePoint 2013 日历视图兼容性问题
    SharePoint 2013 JavaScript 对象判断用户权限
    SharePoint 2013 PowerShell命令备份还原报错
    SharePoint 2013 修改表单认证登录页面
    SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
    linux下永久添加静态路由
    CAN协议,系统结构和帧结构
    STM32串口的设置和库函数的介绍
  • 原文地址:https://www.cnblogs.com/wubingshenyin/p/3569438.html
Copyright © 2011-2022 走看看