android倒计时获取验证码按钮
2017-07-11 15:46
337 查看
Android倒计时获取验证码按钮,先上图:
封装类:
package KiraUtils.view;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by kira on 2017/4/24.
*/
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 timer;
private TimerTask timerTask;
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 handler = 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.setText(textbefore);
TimeButton.this.setTextColor(Color.parseColor("#008040"));
clearTimer();
}
}
};
private void initTimer() {
time = lenght;
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0x01);
}
};
}
private void clearTimer() {
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
if (timerTask != null)
timerTask.cancel();
timerTask = 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);
timer.schedule(timerTask, 0, 1000);
}
public void onDestroy() {
if (map == null)
map = new HashMap<String, Long>();
map.put(TIME, time);
map.put(CTIME, System.currentTimeMillis());
clearTimer();//activity销毁时同时将timerTask取消掉
}
public void onCreate(Bundle bundle) {
if (map == null)
return;
if (map.size() <= 0)// 上次未完成的计时
return;
long time = System.currentTimeMillis() - map.get(CTIME)
-map.get(TIME);
map.clear();
if (time > 0)
return;
else {
initTimer();
this.time = Math.abs(time);
timer.schedule(timerTask, 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;
}
//设置倒计时时间
public TimeButton setLenght(long lenght) {
this.lenght = lenght;
return this;
}
}
布局文件直接引用类就行了
<KiraUtils.view.TimeButton
android:id="@+id/tv_getcode"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:text="获取验证码"
android:background="@null"
android:gravity="center"
android:textColor="#008040" />
在Activity中为按钮添加点击事件就行了
<KiraUtils.view.TimeButton
android:id="@+id/tv_getcode"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:text="获取验证码"
android:background="@null"
android:gravity="center"
android:textColor="#008040" />
封装类:
package KiraUtils.view;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by kira on 2017/4/24.
*/
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 timer;
private TimerTask timerTask;
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 handler = 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.setText(textbefore);
TimeButton.this.setTextColor(Color.parseColor("#008040"));
clearTimer();
}
}
};
private void initTimer() {
time = lenght;
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0x01);
}
};
}
private void clearTimer() {
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
if (timerTask != null)
timerTask.cancel();
timerTask = 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);
timer.schedule(timerTask, 0, 1000);
}
public void onDestroy() {
if (map == null)
map = new HashMap<String, Long>();
map.put(TIME, time);
map.put(CTIME, System.currentTimeMillis());
clearTimer();//activity销毁时同时将timerTask取消掉
}
public void onCreate(Bundle bundle) {
if (map == null)
return;
if (map.size() <= 0)// 上次未完成的计时
return;
long time = System.currentTimeMillis() - map.get(CTIME)
-map.get(TIME);
map.clear();
if (time > 0)
return;
else {
initTimer();
this.time = Math.abs(time);
timer.schedule(timerTask, 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;
}
//设置倒计时时间
public TimeButton setLenght(long lenght) {
this.lenght = lenght;
return this;
}
}
布局文件直接引用类就行了
<KiraUtils.view.TimeButton
android:id="@+id/tv_getcode"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:text="获取验证码"
android:background="@null"
android:gravity="center"
android:textColor="#008040" />
在Activity中为按钮添加点击事件就行了
<KiraUtils.view.TimeButton
android:id="@+id/tv_getcode"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:text="获取验证码"
android:background="@null"
android:gravity="center"
android:textColor="#008040" />
相关文章推荐
- android (获取验证码)倒计时按钮或者TextView
- 【Android自定义View实战】之获取验证码倒计时按钮
- Android自定义View获取注册验证码倒计时按钮
- Android 获取验证码 倒计时按钮
- android中获取手机验证码的倒计时操作
- 点击获取验证码按钮后按钮变灰,倒计时一段时间后又可重复点击
- Android 获取验证码后的倒计时功能
- Android 实现点击按钮获取验证码 60秒后重新获取效果
- Android登陆页面,获取验证码按钮的实现
- Android开发之获取短信验证码后按钮背景变化并且出现倒计时
- Android 获取验证码后 在Button控件上 显示倒计时
- Android中获取验证码时的倒计时效果
- 对安卓获取验证码倒计时60秒Button按钮的简单封装
- Android实现获取验证码的倒计时功能
- Android 获取验证码倒计时
- Android 获取验证码倒计时封装
- clips 前端 js 倒计时 获取验证码的按钮
- Android获取验证码后倒计时程序
- Android实战简易教程<四十一>(显示倒计时的Button-适用于获取验证码)