自定义TimeButton
来源:互联网 发布:文件收发管理系统 源码 编辑:程序博客网 时间:2024/06/03 13:41
public class TimeButton extends Button implements View.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; private Context mContext; 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); mContext = context; 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.setText(textbefore); clearTimer(); } }; }; private void initTimer() { time = lenght; t = new Timer(); tt = new TimerTask() { @Override public void run() { 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(); } /** * 和activity的onCreate()方法同步 */ public void onCreate(Bundle bundle) { 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; } /***/}<com.yyekt.widgets.TimeButtonandroid:layout_alignParentRight="true"android:layout_centerVertical="true"android:id="@+id/btn_getcode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="2"android:background="@null"android:singleLine="true"android:text="获取验证码"android:textColor="#f00"android:textSize="10sp" />
0 0
- 自定义TimeButton
- 自定义倒计时TimeButton
- 自定义TimeButton验证码倒计时
- TimeButton
- Android自定义TimeButton实现倒计时按钮
- android 短信验证码计时button,TimeButton
- 自定义
- 自定义
- 自定义
- 自定义
- 自定义
- 自定义TexBox,自定义ComboBox
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义View自定义属性
- 自定义一个自定义对话框
- 自定义控件-自定义吐司
- A convolutional Neural Network for Modelling Sentences
- PHP 删除项目中的.svn文件
- System.err: java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
- 机器学习: Viola-Jones 人脸检测算法解析(一)
- 论numpy中matrix 和 array的区别
- 自定义TimeButton
- 美国联邦法院批准国税局搜查Coinbase用户资料
- 高精度减法
- cheat安装使用
- [读书笔记]30 天自制操作系统 day11 制作窗口
- linux根目录系统空间不足时的扩容方法
- POJ 1185 炮兵阵地 (状压DP)
- LeetCode 289---Game of Life
- 深入理解Java虚拟机 四、虚拟机性能监控与故障处理工具