安卓开发实现点击验证码变灰并倒计时

来源:互联网 发布:caffe视频教程百度云 编辑:程序博客网 时间:2024/05/22 11:56

安卓开发实现点击验证码变灰并倒计时


废话不多说  直接上源码,这也是最近写项目遇到的 已解决




布局文件写这个
<adapter.TimeButton    android:id="@+id/yanZhengMaButton"    android:layout_marginTop="7dp"    android:layout_width="0dp"    android:layout_weight="1.5"    android:layout_height="35dp"    android:background="@drawable/loginbtn_gray"    android:text="获取验证码"    android:textColor="@color/colorBlack"    android:textSize="16sp"    />


主Mainactivity类的onCreate方法写引用我们的自定义控件
protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_login);  TimeButton timeButton= (TimeButton) findViewById(R.id.yanZhengMaButton);    timeButton.setTextAfter("秒").setTextBefore("获取验证码").setLenght(15 * 1000);     }


这是自定义控件类 直接新建一个类复制上就能用 注意改包路径名 
package adapter;import android.annotation.SuppressLint;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.example.computer.gongxiangbike.R;import java.util.HashMap;import java.util.Map;import java.util.Timer;import java.util.TimerTask;/** *         PS: 由于发现timer每次cancle()之后不能重新schedule方法,所以计时完毕只恐timer. *         每次开始计时的时候重新设置timer, 没想到好办法初次下策 *         注意把该类的onCreate()onDestroy()和activity的onCreate()onDestroy()同步处理 * */public class TimeButton extends Button implements OnClickListener {   private long lenght = 60 * 1000;// 倒计时长度,这里给了默认60秒   private String textafter = "秒后重新获取~";   private String textbefore = "点击获取验证码~";   private final String TIME = "time";   private final String CTIME = "ctime";   private OnClickListener mOnclickListener;   private Timer t;   private TimerTask tt;   private long time;   Map<String, Long> map = new HashMap<String, Long>();   public TimeButton(Context context) {      super(context);      setOnClickListener(this);   }   public TimeButton(Context context, AttributeSet attrs) {      super(context, attrs);      setOnClickListener(this);   }   @SuppressLint("HandlerLeak")   Handler han = new Handler() {      public void handleMessage(android.os.Message msg) {         TimeButton.this.setText(time / 1000 + textafter);         time -= 1000;         if (time < 0) {            TimeButton.this.setEnabled(true);            TimeButton.this.setBackgroundResource(R.drawable.loginbtn);            TimeButton.this.setText(textbefore);            clearTimer();         }      };   };   private void initTimer() {      time = lenght;      t = new Timer();      tt = new TimerTask() {         @Override         public void run() {            Log.e("yung", time / 1000 + "");            han.sendEmptyMessage(0x01);         }      };   }   private void clearTimer() {      if (tt != null) {         tt.cancel();         tt = null;      }      if (t != null)         t.cancel();      t = null;   }   @Override   public void setOnClickListener(OnClickListener l) {      if (l instanceof TimeButton) {         super.setOnClickListener(l);      } else         this.mOnclickListener = l;   }   @Override   public void onClick(View v) {      if (mOnclickListener != null)         mOnclickListener.onClick(v);      initTimer();      this.setText(time / 1000 + textafter);      this.setEnabled(false);      t.schedule(tt, 0, 1000);      // t.scheduleAtFixedRate(task, delay, period);   }   /**    * 和activity的onDestroy()方法同步    */   public void onDestroy() {      if (App.map == null)         App.map = new HashMap<String, Long>();      App.map.put(TIME, time);      App.map.put(CTIME, System.currentTimeMillis());      clearTimer();      Log.e("yung", "onDestroy");   }   /**    * 和activity的onCreate()方法同步    */   public void onCreate(Bundle bundle) {      Log.e("yung", App.map + "");      if (App.map == null)         return;      if (App.map.size() <= 0)// 这里表示没有上次未完成的计时         return;      long time = System.currentTimeMillis() - App.map.get(CTIME)            - App.map.get(TIME);      App.map.clear();      if (time > 0)         return;      else {         initTimer();         this.time = Math.abs(time);         t.schedule(tt, 0, 1000);         this.setText(time + textafter);         this.setEnabled(false);      }   }   /** * 设置计时时候显示的文本 */   public TimeButton setTextAfter(String text1) {      this.textafter = text1;      return this;   }   /** * 设置点击之前的文本 */   public TimeButton setTextBefore(String text0) {      this.textbefore = text0;      this.setText(textbefore);      return this;   }   /**    * 设置到计时长度    *    * @param lenght    *            时间 默认毫秒    * @return    */   public TimeButton setLenght(long lenght) {      this.lenght = lenght;      return this;   }   /***/  protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        TimeButton timeButton= (TimeButton) findViewById(R.id.yanZhengMaButton);        timeButton.setTextAfter("秒").setTextBefore("获取验证码").setLenght(15 * 1000);}

原创粉丝点击