安卓获取验证码,并实现倒计时

package com.dajun.ccpp.customview;

import java.util.Timer;
import java.util.TimerTask;

import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;

import com.mukr.zc.R;

public class SDSendValidateButton extends Button
{

	private static final int DISABLE_TIME = 60;
	private static final int MSG_TICK = 0;

	private Timer mTimer = null;
	private TimerTask mTask = null;

	private int mDisableTime = DISABLE_TIME; // 倒计时时间,默认60秒
	private int mEnableColor = Color.WHITE;
	private int mDisableColor = Color.WHITE;
	private final int mTextSize = 12;
	private String mEnableString = getResources().getString(R.string.get_verification_code);
	private String mDisableString = getResources().getString(R.string.again_send_verification_code);

	private boolean mClickBle = true;

	private SDSendValidateButtonListener mListener = null;

	public int getmDisableTime()
	{
		return mDisableTime;
	}

	public int getmEnableColor()
	{
		return mEnableColor;
	}

	public void setmEnableColor(int mEnableColor)
	{
		this.mEnableColor = mEnableColor;
		this.setTextColor(mEnableColor);
	}

	public int getmDisableColor()
	{
		return mDisableColor;
	}

	public void setmDisableColor(int mDisableColor)
	{
		this.mDisableColor = mDisableColor;
	}

	public String getmEnableString()
	{
		return mEnableString;
	}

	public void setmEnableString(String mEnableString)
	{
		this.mEnableString = mEnableString;
		if (mEnableString != null)
		{
			this.setText(mEnableString);
		}
	}

	public String getmDisableString()
	{
		return mDisableString;
	}

	public void setmDisableString(String mDisableString)
	{
		this.mDisableString = mDisableString;
	}

	public void setmListener(SDSendValidateButtonListener mListener)
	{
		this.mListener = mListener;
	}

	private Handler mHandler = new Handler(Looper.getMainLooper())
	{

		@Override
		public void handleMessage(Message msg)
		{
			switch (msg.what)
			{
			case MSG_TICK:
				tickWork();
				break;

			default:
				break;
			}
			super.handleMessage(msg);
		}

	};

	public SDSendValidateButton(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		initView();
	}

	private void initView()
	{
		this.setText(mEnableString);
		this.setGravity(Gravity.CENTER);
		this.setTextColor(mEnableColor);
		this.setTextSize(mTextSize);
		this.setPadding(15, 10, 15, 10);
		initTimer();
		this.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				if (mListener != null && mClickBle)
				{
					// startTickWork();
					mListener.onClickSendValidateButton();
				}
			}
		});
	}

	private void initTimer()
	{
		mTimer = new Timer();

	}

	private void initTimerTask()
	{
		mTask = new TimerTask()
		{
			@Override
			public void run()
			{
				mHandler.sendEmptyMessage(MSG_TICK);
			}
		};
	}

	public void startTickWork()
	{
		if (mClickBle)
		{
			mClickBle = false;
			SDSendValidateButton.this.setText(mDisableTime + mDisableString);
			SDSendValidateButton.this.setTextColor(mDisableColor);
			initTimerTask();
			mTimer.schedule(mTask, 0, 1000);
		}
	}

	/**
	 * 每秒钟调用一次
	 */
	private void tickWork()
	{
		mDisableTime--;
		this.setText(mDisableTime + mDisableString);
		if (mListener != null)
		{
			mListener.onTick();
		}

		if (mDisableTime <= 0)
		{
			stopTickWork();
		}
	}

	public void stopTickWork()
	{
		mTask.cancel();
		mTask = null;
		mDisableTime = DISABLE_TIME;
		this.setText(mEnableString);
		this.setTextColor(mEnableColor);

		mClickBle = true;
	}

	public interface SDSendValidateButtonListener
	{
		public void onClickSendValidateButton();

		public void onTick();
	}

}

整个工具类,这个是本人从项目中直接 贴出来的,复用性比较强,仅供初学者参考,学习,这只是xml引用这个工具类,java实现点击,倒计时看下面:


@ViewInject(R.id.act_save_reset_pwd_btn_send_add_bank)
	private SDSendValidateButton mBtn_send_mobile_add_bank = null;

<pre name="code" class="java">mBtn_send_mobile_add_bank
				.setmListener(new SDSendValidateButtonListener() {

					@Override
					public void onTick() {

					}

					@Override
					public void onClickSendValidateButton() {
						requestAddbank1();
					}
				});
<span style="font-size:24px;color:#FF0000;">requestAddbank1()这个方法是想服务器发送请求,获取actAddModel.getResponse_code()==1</span>
 
表示请求发送验证码成功,开始实现,倒计时: 
 
 
if (actAddModel.getResponse_code().equals("1")) {
						mBtn_send_mobile_add_bank.startTickWork();
					}


 



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值