Android中通过Hanler实现短信倒计时效果
2016-06-12 22:51
387 查看
在应用中登陆、注册、修改密码等都会使用到通过短信的方式获取验证码,验证码时间大部分为60秒,如果用户没有输入,可以点击再次发送,通过Android中的handler可以实现这样的效果!
public class MainActivity extends AppCompatActivity {
private TextView tvTime;
private static final int VERIFY_CODE = 60;
/**
* 倒计时时间
*/
private int time = VERIFY_CODE;
private boolean isTimeOut = true;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTime = (TextView) findViewById(R.id.tv_count_down);
tvTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isTimeOut) {
time = VERIFY_CODE;
sendMsg();
}
}
});
}
/**
* handler 发送消息 实现倒计时
*/
private void sendMsg() {
isTimeOut = false;
tvTime.setClickable(false);
if (mHandler == null) {
mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (time > 0) {
// 再发一条延时消息,实现递归循环效果
mHandler.sendEmptyMessageDelayed(1, 1000);
time--;
tvTime.setText("获取验证码\r\n(" + time + "秒)");
} else {
tvTime.setText("重取验证码\r");
tvTime.setClickable(true);
isTimeOut = true;
}
}
;
};
}
// 再发一条延时消息,实现递归循环效果
if (time > 0) {
mHandler.sendEmptyMessageDelayed(1, 1000);
time--;
tvTime.setText("获取验证码\r\n(" + time + "秒)");
}
}
}
public class MainActivity extends AppCompatActivity {
private TextView tvTime;
private static final int VERIFY_CODE = 60;
/**
* 倒计时时间
*/
private int time = VERIFY_CODE;
private boolean isTimeOut = true;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTime = (TextView) findViewById(R.id.tv_count_down);
tvTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isTimeOut) {
time = VERIFY_CODE;
sendMsg();
}
}
});
}
/**
* handler 发送消息 实现倒计时
*/
private void sendMsg() {
isTimeOut = false;
tvTime.setClickable(false);
if (mHandler == null) {
mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (time > 0) {
// 再发一条延时消息,实现递归循环效果
mHandler.sendEmptyMessageDelayed(1, 1000);
time--;
tvTime.setText("获取验证码\r\n(" + time + "秒)");
} else {
tvTime.setText("重取验证码\r");
tvTime.setClickable(true);
isTimeOut = true;
}
}
;
};
}
// 再发一条延时消息,实现递归循环效果
if (time > 0) {
mHandler.sendEmptyMessageDelayed(1, 1000);
time--;
tvTime.setText("获取验证码\r\n(" + time + "秒)");
}
}
}
相关文章推荐
- 【Android官方文档】翻译Android官方文档-Services(二)
- Android Studio中运行报错:libpng error: Not a PNG file的解决方法
- AndroidStudio的ectranslation插件的使用
- android之读取SD卡状态
- ListView的用法 - 第一行代码—android学习笔记
- 5.乐学成语-----------显示动物类成语列表
- 安卓系统按键映射修改
- Android-银联支付开发
- AS中jar包和aar包的导出与导入
- android 左右滑动实现切换背景
- RecycleView简单使用
- 可扩展的listview
- 4.乐学成语----------显示学习列表
- Android开发——Bitmap,byte[],Drawable相互转化
- Android Studio 事件分发机制笔记
- android应用程序如何调用支付宝接口
- 3.乐学成语----------显示主界面
- Android: Intent详细使用方法
- Android5.0的Palette(调色板)、视图阴影、着色和裁剪介绍
- Android touch 事件传递机制