安卓开发实现点击验证码变灰并倒计时
来源:互联网 发布: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);}
阅读全文
0 0
- 安卓开发实现点击验证码变灰并倒计时
- 安卓获取验证码,并实现倒计时
- 安卓验证码倒计时的实现
- 安卓倒计时实现
- jquery 实现验证码倒计时 点击按钮后倒计时效果
- 安卓CountDownTimer实现全民夺宝抢购倒计时和短信验证码倒计时
- 安卓倒计时的实现
- 点击验证倒计时
- 安卓短信验证码倒计时效果
- 安卓发送验证码倒计时效果和自动获取验证码并填充到输入框
- Android开发:验证码倒计时功能实现
- JQ实现点击后手机验证码倒计时代码
- 获取验证码按钮,点击后倒计时功能的实现
- 安卓学习笔记---实现倒计时,重新倒计时
- 安卓开发 给textview添加点击事件并设置点击颜色
- 安卓第三次实验:游戏倒计时实现
- 安卓的短信倒计时实现
- 安卓开发——点击效果的实现
- 2017.06.29回顾
- grep命令详解
- 右手坐标系下LookAt视图矩阵的推导
- 百度 CEO 李彦宏:未来三五十年人工智能可能是世界经济发展主要推动力
- CDH参考文档
- 安卓开发实现点击验证码变灰并倒计时
- python笔记005——os.path模块用法详解
- Lintcode82 Single Number solution题解
- 搭建LNMP环境(CentOS 6)
- Activity关闭源码分析(三)
- spring mvc实现简单上传文件
- 【iOS开发】如何将 iOS 项目的编译速度提高5倍
- eclipse的web工程转换
- Android RecyclerView 的基本使用