java 過濾器形式(Filter/Criteria Pattern)具體引見。本站提示廣大學習愛好者:(java 過濾器形式(Filter/Criteria Pattern)具體引見)文章只能為提供參考,不一定能成為您想要的結果。以下是java 過濾器形式(Filter/Criteria Pattern)具體引見正文
後面為年夜家講過計時器的順時針的兩種辦法,在錄制視頻等操作中很有應用,明天就給年夜家帶來倒計時完成的兩種方法。
固然比來寫的都比擬簡略和基本,不外簡略不代表熟習,基本不代表就會,年夜牛繞過,哈,中牛小牛也能夠繞過,這個是寫給初學者的。
先弄個後果圖。
代碼完成方法也超等簡略啦,這裡首推第一種完成方法,並且也是比擬合適年夜家的,就是經由過程直接繼續CountDownTimer來完成。
關於CountDownTimer這個類很簡略,繼續它的時刻必需重寫結構辦法和完成其虛擬辦法。
結構辦法的兩個參數分離是(倒計時開端時光,距離時光)
別的兩個辦法分離是onTick(如今還剩的時光),計時停止後你想做的時光可以在onFinish()中做。
值的留意的是,一切的時光都是以毫秒情勢來做的,所以在你應用的時刻要記得整除1000取商。
不外因為我應用的是公有外部類的方法對內部類存在援用,為了避免內存洩露,在Activity燒毀的時刻應當留意對其置空,異樣我們也應當防止反復創立對象。
別的一種方法照樣應用我們經常使用的Handler + Thread的方法來完成。不外完成的時刻異樣要異常當心內存洩露,由於假如用戶在燒毀Activity的時刻應當留意讓其計時子線程不再輪回,這個可以經由過程設置一個tag標簽對其斷定。
如許在燒毀的時刻把這個tag標簽置為false,停止線程的履行!
上面是完成代碼:
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; } /** * 完成倒計時的類 */ 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>
寫在最初:固然代碼和完成都異常簡略,你能夠不費吹灰之力,不外倘使轉載的話,照樣留個本文鏈接吧~thank you!
github鏈接:https://github.com/nanchen2251/TimerDemo
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。