程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 過濾器形式(Filter/Criteria Pattern)具體引見

java 過濾器形式(Filter/Criteria Pattern)具體引見

編輯:關於JAVA

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

 以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved