怎么在Android中通过自定义TimeButton实现倒计时按钮

  介绍

这期内容当中小编将会给大家带来有关怎么在Android中通过自定义TimeButton实现倒计时按钮,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

首先新建一个应用程序。类继承于应用

package  com.example.xuboyu.myapplication;      import  java.util.Map;   ,   import  android.app.Application;   ,   public  class  App  extends  Application  {   ,//用于存放倒计时时间   ,public  static  Map<字符串,Long>,地图;   }

然后编写TimeButton。类继承于按钮

package  com.example.xuboyu.myapplication;   ,   ,   import  java.util.HashMap;   import  java.util.Map;   import  java.util.Timer;   import  java.util.TimerTask;   ,   import  android.annotation.SuppressLint;   import  android.content.Context;   import  android.os.Bundle;   import  handler;   import  android.util.AttributeSet;   import  android.util.Log;   import  android.view.View;   import  android.view.View.OnClickListener;   import  android.widget.Button;   ,/* *   ,*倒计时按钮   ,* @author  bnuzlbs-xuboyu  2017/4/5。   ,*注意把该类的onCreate () onDestroy()和活动的onCreate () onDestroy()同步处理   ,*/public  class  TimeButton  extends  Button  implements  OnClickListener  {   ,private  long  lenght =, 60, *, 1000;//,倒计时长度,这里给了默认60秒   ,private  String  textafter =,“秒后重新获取~“;   ,private  String  textbefore =,“点击获取验证码~“;   ,private  int  colorafter;   ,private  int  colorbefore;   ,private  final  String  TIME =,“time";   ,private  final  String  CTIME =,“ctime";   ,private  OnClickListener  mOnclickListener;   ,private  Timer  t;   tt, private  TimerTask ;   ,private  long 时间;   ,Map<字符串,Long>, map =, new  HashMap<字符串,,Long> ();   ,   ,public  TimeButton (Context 上下文),{   ,超级(上下文);   ,setOnClickListener(这个);   ,   ,}   ,   ,public  TimeButton (Context 上下文,AttributeSet  attrs), {   ,超级(上下文,attrs);   ,setOnClickListener(这个);   ,}   ,   ,@SuppressLint (“HandlerLeak")   ,Handler  han =, new 处理程序(),{   ,public  void  handleMessage (android.os.Message 味精),{   TimeButton.this.setText才能(time /, 1000, +, textafter);   -=time 才能;1000;   if 才能;(time  & lt;, 0), {   TimeButton.this.setEnabled才能(真正的);   TimeButton.this.setText才能(textbefore);   clearTimer才能();   ,,}   ,};   ,};   ,   ,private  void  initTimer (), {=,time 长度;=,,t  new 计时器();=,,tt  new  TimerTask (), {   ,   @Override才能   public 才能;void 运行(),{   Log.e才能(“xuboyu",, time /, 1000, +,““);   han.sendEmptyMessage才能(0 x01);//十六进制的数字1   ,,}   ,};   ,}   ,   ,private  void  clearTimer (), {   ,if  (tt  !=, null), {   tt.cancel才能();   时间=tt 才能;零;   ,}   ,if  (t  !=, null)   t.cancel才能();=,t 零;   ,}   ,   ,@Override   ,public  void  setOnClickListener (OnClickListener  l), {   ,if  (l  instanceof  TimeButton), {   super.setOnClickListener才能(l);   其他,}   l=this.mOnclickListener 才能;;   ,}   ,   ,@Override   ,public  void  onClick (View  v), {   ,if  (mOnclickListener  !=, null)   mOnclickListener.onClick才能(v);   ,initTimer ();   1000年,this.setText (time /,, +, textafter);   ,this.setEnabled(假);   ,t.schedule (tt, 0, 1000);   ,//t.scheduleAtFixedRate(任务,时间延迟,大敌;;时期);   ,}   ,/* *   ,*和活动的onDestroy()方法同步   ,*/,public  void  onDestroy (), {   ,if  (App.map ==, null)   App.map 才能=,new  HashMap<字符串,,Long> ();   ,App.map.put(时间,时间);   ,App.map.put (CTIME, System.currentTimeMillis ());   ,clearTimer ();   ,Log.e (“xuboyu",,“onDestroy");   ,}   ,/* *   ,*和活动的onCreate()方法同步   ,*/,public  void  onCreate (Bundle 包),{   ,Log.e (“xuboyu:倒计时相关“,,App.map  +,““);   ,if  (App.map ==, null)   返回才能;   ,if  (App.map.size (), & lt;=, 0)//,这里表示没有上次未完成的计时   返回才能;   ,long  time =, System.currentTimeMillis(),安康;App.map.get (CTIME)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Android中通过自定义TimeButton实现倒计时按钮