最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android獲取驗證碼倒計時顯示效果

 更新時間:2016年10月12日 10:16:45   作者:南塵  
這篇文章主要為大家詳細介紹了Android獲取驗證碼顯示的兩種簡單實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下

前面為大家講過計時器的順時針的兩種方法,在錄制視頻等操作中頗有使用,今天就給大家?guī)淼褂嫊r實現(xiàn)的兩種方式。

雖然最近寫的都比較簡單和基礎,不過簡單不代表熟悉,基礎不代表就會,大牛繞過,哈,中牛小牛也可以繞過,這個是寫給初學者的。

先搞個效果圖。

代碼實現(xiàn)方式也超級簡單啦,這里首推第一種實現(xiàn)方式,而且也是比較適合大家的,就是通過直接繼承CountDownTimer來實現(xiàn)。

對于CountDownTimer這個類很簡單,繼承它的時候必須重寫構造方法和實現(xiàn)其虛擬方法。

構造方法的兩個參數(shù)分別是(倒計時開始時間,間隔時間)

另外兩個方法分別是onTick(現(xiàn)在還剩的時間),計時結束后你想做的時間可以在onFinish()中做。

值的注意的是,所有的時間都是以毫秒形式來做的,所以在你使用的時候要記得整除1000取商。

不過由于我使用的是私有內部類的方式對外部類存在引用,為了防止內存泄漏,在Activity銷毀的時候應該注意對其置空,同樣我們也應該避免重復創(chuàng)建對象。

另外一種方式還是使用我們常用的Handler + Thread的方式來實現(xiàn)。不過實現(xiàn)的時候同樣要非常小心內存泄漏,因為如果用戶在銷毀Activity的時候應該注意讓其計時子線程不再循環(huán),這個可以通過設置一個tag標簽對其判斷。

這樣在銷毀的時候把這個tag標簽置為false,結束線程的執(zhí)行!

下面是實現(xiàn)代碼:

package com.example.nanchen.timerdemo;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

 private Button mBtnGetCode;
 private TimeCount mTimeCount;
 private Button mBtnGetCode2;
 private boolean timeFlag = true;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 mBtnGetCode = (Button) findViewById(R.id.main_btn_get_code);
 mBtnGetCode.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  mTimeCount = null;
  mTimeCount = new TimeCount(60 * 1000, 1000);
  mTimeCount.start();
  }
 });

 mBtnGetCode2 = (Button) findViewById(R.id.main_btn_get_code_2);
 mBtnGetCode2.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  mBtnGetCode2.setClickable(false);
  mBtnGetCode2.setBackgroundColor(getResources().getColor(R.color.btn_unable));
  timeFlag = true;
  new Thread() {
   @Override
   public void run() {
   super.run();
   for (int i = 59; i >= 0 && timeFlag; i--) {
    try {
    sleep(1000);
    Message msg = Message.obtain();
    msg.what = i;
    mHandler.sendMessage(msg);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
   }
   }
  }.start();
  }
 });
 }

 private Handler mHandler = new Handler() {
 @Override
 public void handleMessage(Message msg) {
  super.handleMessage(msg);
  if (msg.what > 0) {
  mBtnGetCode2.setText("(" + msg.what + ")秒后重試");
  } else {
  mBtnGetCode2.setText("獲取驗證碼");
  mBtnGetCode2.setClickable(true);
  mBtnGetCode2.setBackgroundColor(getResources().getColor(R.color.colorAccent));
  }
 }


 };


 /**
 * Activity 銷毀的時候注意把所有引用置為空,防止內存泄漏
 */
 @Override
 protected void onDestroy() {
 super.onDestroy();
 mTimeCount = null;
 timeFlag = false;
 }

 /**
 * 實現(xiàn)倒計時的類
 */
 private class TimeCount extends CountDownTimer {

 /**
  * @param millisInFuture The number of millis in the future from the call
  *    to {@link #start()} until the countdown is done and {@link #onFinish()}
  *    is called.
  * @param countDownInterval The interval along the way to receive
  *    {@link #onTick(long)} callbacks.
  */
 public TimeCount(long millisInFuture, long countDownInterval) {
  super(millisInFuture, countDownInterval);
 }

 /**
  * 計時過程顯示 按鈕不可用 設置為灰色
  *
  * @param millisUntilFinished
  */
 @Override
 public void onTick(long millisUntilFinished) {
  mBtnGetCode.setClickable(false);
  mBtnGetCode.setBackgroundColor(getResources().getColor(R.color.btn_unable));
  mBtnGetCode.setText("(" + millisUntilFinished / 1000 + ")秒后重試");
 }

 /**
  * 計時結束調用
  */
 @Override
 public void onFinish() {
  mBtnGetCode.setClickable(true);
  mBtnGetCode.setText("獲取驗證碼方式1");
  mBtnGetCode.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
 }
 }


}

簡單看一下xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.example.nanchen.timerdemo.MainActivity">

 <Button
 android:layout_marginTop="10dp"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:id="@+id/main_btn_get_code"
 android:text="獲取驗證碼方式1"
 android:background="@color/colorPrimaryDark"/>

 <TextView
 android:layout_width="match_parent"
 android:layout_height="1dp"
 android:id="@+id/main_line1"
 android:background="@color/btn_unable"
 android:layout_below="@+id/main_btn_get_code"
 android:layout_marginTop="10dp"/>

 <Button
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@+id/main_line1"
 android:layout_marginTop="10dp"
 android:text="獲取驗證碼方式2"
 android:id="@+id/main_btn_get_code_2"
 android:background="@color/colorAccent"/>

</RelativeLayout>

寫在最后:雖然代碼和實現(xiàn)都非常簡單,你可能不費吹灰之力,不過倘若轉載的話,還是留個本文鏈接吧~thank you!

github鏈接:https://github.com/nanchen2251/TimerDemo

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android實現(xiàn)省市區(qū)三級聯(lián)動

    Android實現(xiàn)省市區(qū)三級聯(lián)動

    這篇文章主要為大家詳細介紹了Android實現(xiàn)省市區(qū)三級聯(lián)動,Spinner實現(xiàn)省市區(qū)的三級聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 淺談Android textview文字對齊換行的問題

    淺談Android textview文字對齊換行的問題

    下面小編就為大家分享一篇淺談Android textview文字對齊換行的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Android動態(tài)修改ToolBar的Menu菜單示例

    Android動態(tài)修改ToolBar的Menu菜單示例

    本篇文章主要介紹了Android動態(tài)修改ToolBar的Menu菜單示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android?Activity共享元素動畫示例解析

    Android?Activity共享元素動畫示例解析

    這篇文章主要為大家介紹了Android?Activity共享元素動畫示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 詳解android是如何管理內存的

    詳解android是如何管理內存的

    這篇文章主要介紹了詳解android是如何管理內存的,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Android實現(xiàn)系統(tǒng)語言切換功能

    Android實現(xiàn)系統(tǒng)語言切換功能

    這篇文章主要為大家詳細介紹了Android系統(tǒng)語言切換功能的實現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android開發(fā)實例之登錄界面的實現(xiàn)

    Android開發(fā)實例之登錄界面的實現(xiàn)

    本文主要介紹Android 登錄界面實現(xiàn),這里主要講解類似Twitter的登錄界面的實現(xiàn),有興趣的小伙伴可以參考下
    2016-08-08
  • RecyclerBezierChart曲線圖表繪制

    RecyclerBezierChart曲線圖表繪制

    這篇文章主要為大家介紹了RecyclerBezierChart曲線圖表繪制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Android中AutoCompleteTextView自動提示

    Android中AutoCompleteTextView自動提示

    這篇文章主要為大家詳細介紹了Android中AutoCompleteTextView自動提示的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android中Android Virtual Device(AVD)使用教程

    Android中Android Virtual Device(AVD)使用教程

    這篇文章主要介紹了Android中Android Virtual Device(AVD)使用教程,本文還對使用過程中發(fā)生的一些錯誤給出了處理方法,需要的朋友可以參考下
    2015-01-01

最新評論

石渠县| 来凤县| 新昌县| 茌平县| 民丰县| 五家渠市| 株洲市| 溧水县| 讷河市| 连州市| 临朐县| 平顶山市| 柘荣县| 昌图县| 平遥县| 灵山县| 河西区| 茂名市| 商都县| 婺源县| 丘北县| 长葛市| 疏附县| 新宁县| 玛多县| 盐津县| 平顺县| 开远市| 东光县| 绩溪县| 莱西市| 芷江| 桐城市| 宾阳县| 长武县| 深水埗区| 沙洋县| 伊春市| 天台县| 阿拉尔市| 通化市|