中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么實現倒計時按鈕效果

發布時間:2021-08-09 16:59:46 來源:億速云 閱讀:90 作者:Leah 欄目:編程語言

本篇文章為大家展示了Android中怎么實現倒計時按鈕效果,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

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

點擊按鈕后開始倒計時,貌似很簡單啊,但是運行起來發現有一些問題,先給大家看效果圖

我們打印一下時間

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

public class TimeButton extends Button implements View.OnClickListener { private long length = 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 = 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, "計時結束", 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);  } } /**  * 設置計時時候顯示的文本  */ 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.length = lenght;  return this; }}

上述內容就是Android中怎么實現倒計時按鈕效果,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绿春县| 伊金霍洛旗| 库尔勒市| 深圳市| 吉木萨尔县| 洪洞县| 平舆县| 乌海市| 山东| 韩城市| 宁南县| 开平市| 克山县| 康马县| 鄱阳县| 闻喜县| 额敏县| 瑞金市| 吕梁市| 巴南区| 大埔区| 牡丹江市| 会理县| 吉木萨尔县| 濮阳市| 云龙县| 元江| 奉贤区| 大冶市| 沐川县| 台北市| 水富县| 洪雅县| 湄潭县| 中山市| 女性| 台南市| 万山特区| 共和县| 叙永县| 瓦房店市|