国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實現(xiàn)倒計時的按鈕的示例代碼

2019-12-12 04:09:57
字體:
供稿:網(wǎng)友

最近有人問我如何實現(xiàn)倒計時的按鈕功能,例如發(fā)送驗證碼,我記得有個CountDownTimer,因為好久沒用過了,自己就寫了一個,代碼如下

 new CountDownTimer(10000, 1000) {          @Override          public void onTick(long millisUntilFinished) {            btn2.setEnabled(false);            btn2.setText(String.format("%ds后重新發(fā)送驗證碼",millisUntilFinished/1000));          }          @Override          public void onFinish() {            btn2.setEnabled(true);            btn2.setText("發(fā)送驗證碼");          }        }.start();

點(diǎn)擊按鈕后開始倒計時,貌似很簡單啊,但是運(yùn)行起來發(fā)現(xiàn)有一些問題,先給大家看效果圖

我們打印一下時間

這里我們可以看到8這個秒數(shù)沒有出現(xiàn),并且最后1秒的時間有些長,每次點(diǎn)擊開始倒計時的時候偶爾就會出現(xiàn)少一個數(shù)字的問題,所以說這個東西是不精確的,網(wǎng)上也有很多人再說,那么有沒有其他的實現(xiàn)思路呢?這里我們來自定義一個倒計時的按鈕

public class TimeButton extends Button implements View.OnClickListener {  private long length = 60 * 1000;// 倒計時長度,這里給了默認(rèn)60秒  private String textafter = "秒后重新獲取";  private String textbefore = "點(diǎn)擊獲取驗證碼";  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 = length;    t = new Timer();    tt = new TimerTask() {      @Override      public void run() {        Log.e("yung", time / 1000 + "");        han.sendEmptyMessage(0x01);      }    };  }  private void clearTimer() {    Toast.makeText(mContext, "計時結(jié)束", Toast.LENGTH_SHORT).show();    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);  }  /**   * 和activity的onDestroy()方法同步   */  public void onDestroy() {    if (MainActivity.map == null)      MainActivity.map = new HashMap<String, Long>();    MainActivity.map.put(TIME, time);    MainActivity.map.put(CTIME, System.currentTimeMillis());    clearTimer();  }  /**   * 和activity的onCreate()方法同步   */  public void onCreate(Bundle bundle) {    Log.e("yung", MainActivity.map + "");    if (MainActivity.map == null)      return;    if (MainActivity.map.size() <= 0)// 這里表示沒有上次未完成的計時      return;    long time = System.currentTimeMillis() - MainActivity.map.get(CTIME)        - MainActivity.map.get(TIME);    MainActivity.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);    }  }  /**   * 設(shè)置計時時候顯示的文本   */  public TimeButton setTextAfter(String text1) {    this.textafter = text1;    return this;  }  /**   * 設(shè)置點(diǎn)擊之前的文本   */  public TimeButton setTextBefore(String text0) {    this.textbefore = text0;    this.setText(textbefore);    return this;  }  /**   * 設(shè)置到計時長度   *   * @param lenght 時間 默認(rèn)毫秒   * @return   */  public TimeButton setLenght(long lenght) {    this.length = lenght;    return this;  }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泾川县| 连城县| 黎川县| 吉林省| 平原县| 福贡县| 荔浦县| 札达县| 山丹县| 乡城县| 财经| 礼泉县| 泗阳县| 赤壁市| 民权县| 怀柔区| 闽清县| 渭源县| 仁化县| 万源市| 娄烦县| 基隆市| 荔波县| 合作市| 盱眙县| 昂仁县| 海丰县| 德保县| 寻甸| 绥棱县| 错那县| 都兰县| 昆山市| 阿尔山市| 崇明县| 定兴县| 叶城县| 东光县| 台安县| 井研县| 黄陵县|