Android倒計時CountDownTimer小記

來源:互聯網
上載者:User

Android倒計時CountDownTimer小記

Android 超簡便的倒計時實現: CountDownTimer

CountDownTimer由系統提供

查資料的時候 發現了CountDownTimer這個類之後 果斷拋棄了以前的倒計時做法


功能:

30秒倒計時 每次間隔1秒


參數:

mc.start();方法開始

mc.cancel();方法結束

new MyCountDownTimer(30000, 1000); 第一個參數表示 總的時間為30000毫秒,間隔1000毫秒



直接上代碼:

package com.example.daojishi;import android.app.Activity;import android.os.Bundle;import android.os.CountDownTimer;import android.util.Log;import android.view.View;import android.widget.TextView;import android.widget.Toast;/** *  * @author baozi *  * 倒計時的類  CountDownTimer *  */public class MainActivity extends Activity {private MyCountDownTimer mc;private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.show);mc = new MyCountDownTimer(30000, 1000);mc.start();}public void oncancel(View view) {Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_LONG).show();// toast有顯示時間延遲mc.cancel();}public void restart(View view) {Toast.makeText(MainActivity.this, "重新開始", Toast.LENGTH_LONG).show();// toast有顯示時間延遲mc.start();}/** * 繼承 CountDownTimer 防範 *  * 重寫 父類的方法 onTick() 、 onFinish() */class MyCountDownTimer extends CountDownTimer {/** *  * @param millisInFuture *            表示以毫秒為單位 倒計時的總數 *  *            例如 millisInFuture=1000 表示1秒 *  * @param countDownInterval *            表示 間隔 多少微秒 調用一次 onTick 方法 *  *            例如: countDownInterval =1000 ; 表示每1000毫秒調用一次onTick() *  */public MyCountDownTimer(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}@Overridepublic void onFinish() {tv.setText("done");}@Overridepublic void onTick(long millisUntilFinished) {Log.i("MainActivity", millisUntilFinished + "");tv.setText("倒計時(" + millisUntilFinished / 1000 + ")...");}}}//┏┓   ┏┓//┏┛┻━━━┛┻┓//┃       ┃  //┃   ━   ┃//┃ ┳┛ ┗┳ ┃//┃       ┃//┃   ┻   ┃//┃       ┃//┗━┓   ┏━┛//┃   ┃   神獸保佑        //┃   ┃   代碼無BUG!//┃   ┗━━━┓//┃       ┣┓//┃       ┏┛//┗┓┓┏━┳┓┏┛//  ┃┫┫ ┃┫┫//  ┗┻┛ ┗┻┛

布局:

            


附:

CountDownTimer源碼:

/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package android.os;import android.util.Log;/** * Schedule a countdown until a time in the future, with * regular notifications on intervals along the way. * * Example of showing a 30 second countdown in a text field: * * 
 * new CountDownTimer(30000, 1000) { * *     public void onTick(long millisUntilFinished) { *         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000); *     } * *     public void onFinish() { *         mTextField.setText("done!"); *     } *  }.start(); * 
* * The calls to {@link #onTick(long)} are synchronized to this object so that * one call to {@link #onTick(long)} won't ever occur before the previous * callback is complete. This is only relevant when the implementation of * {@link #onTick(long)} takes an amount of time to execute that is significant * compared to the countdown interval. */public abstract class CountDownTimer { /** * Millis since epoch when alarm should stop. */ private final long mMillisInFuture; /** * The interval in millis that the user receives callbacks */ private final long mCountdownInterval; private long mStopTimeInFuture; /** * @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 CountDownTimer(long millisInFuture, long countDownInterval) { mMillisInFuture = millisInFuture; mCountdownInterval = countDownInterval; } /** * Cancel the countdown. */ public final void cancel() { mHandler.removeMessages(MSG); } /** * Start the countdown. */ public synchronized final CountDownTimer start() { if (mMillisInFuture <= 0) { onFinish(); return this; } mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture; mHandler.sendMessage(mHandler.obtainMessage(MSG)); return this; } /** * Callback fired on regular interval. * @param millisUntilFinished The amount of time until finished. */ public abstract void onTick(long millisUntilFinished); /** * Callback fired when the time is up. */ public abstract void onFinish(); private static final int MSG = 1; // handles counting down private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { synchronized (CountDownTimer.this) { final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime(); if (millisLeft <= 0) { onFinish(); } else if (millisLeft < mCountdownInterval) { // no tick, just delay until done sendMessageDelayed(obtainMessage(MSG), millisLeft); } else { long lastTickStart = SystemClock.elapsedRealtime(); onTick(millisLeft); // take into account user's onTick taking time to execute long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime(); // special case: user's onTick took more than interval to // complete, skip to next interval while (delay < 0) delay += mCountdownInterval; sendMessageDelayed(obtainMessage(MSG), delay); } } } };}

每日精進 前進一步


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.