編輯:Android開發實例
前言
本章內容android.os.CountDownTime章節,版本為Android 4.0 r1,翻譯來自:"liliang1222",再次感謝他 !
CountDownTimer
譯者署名: liliang1222
版本:Android 4.0 r1
結構
繼承關系
public abstract class CountDownTimer extends Object
java.lang.Object
android.os.CountDownTimer
類概述
定時執行在一段時候後停止的倒計時,在倒計時執行過程中會在固定間隔時間得到通知(譯者:觸發onTick方法),下面的例子顯示在一個文本框中顯示一個30s倒計時:
new CountdownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
onTick的調用是同步的,保證這次調用不會在之前調用完成前發生。這裡的同步機制主要是用來:onTick的實現需要很多時間執行比倒計時間隔更重要的事情。
構造函數
public CountDownTimer (long millisInFuture, long countDownInterval)
參數
millisInFuture 從開始調用start()到倒計時完成並onFinish()方法被調用的毫秒數。(譯者注:倒計時時間,單位毫秒)
countDownInterval 接收onTick(long)回調的間隔時間。(譯者注:單位毫秒)
公共方法
public final void cancel ()
取消倒計時(譯者:取消後,再次啟動會重新開始倒計時)
public abstract void onFinish ()
倒計時完成時被調用
public abstract void onTick (long millisUntilFinished)
固定間隔被調用
參數
millisUntilFinished 倒計時剩余時間。
public synchronized final CountDownTimer start ()
啟動倒計時
補充
示例代碼
Java:
package com.test.countdowntimer;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.test.R;
public class CountDownTimeActivity extends Activity implements OnClickListener {
TextView mTextView;
Button mButton1;
Button mButton2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.countdown);
mTextView = (TextView)findViewById(R.id.textView1);
mButton1 = (Button)findViewById(R.id.button1);
mButton2 = (Button)findViewById(R.id.button2);
mButton1.setOnClickListener(this);
mButton2.setOnClickListener(this);
}
CountDownTimer timer = new CountDownTimer(40000,1000) {
@Override
public void onTick(long millisUntilFinished) {
mTextView.setText("seconds remaining: " + millisUntilFinished / 1000);
try {
Thread.sleep(1200);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e("CountDown",millisUntilFinished+"");
}
@Override
public void onFinish() {
mTextView.setText("done!");
}
};
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
timer.start();
break;
case R.id.button2:
timer.cancel();
break;
}
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<Button android:text="開始" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="取消" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
說明:
CountDownTimer的間隔為1s,我們在onTIck方法裡面休眠了1.2s,所以log出來發現打印間隔變成了2s,即中間一次onTick方法沒有被執行(不會在之前一次調用完成前被調用)。
一般來說在Android裡要實現樹形菜單,都是用ExpandableList(也有高手自己繼承ListView或者LinearLayout來做),但是Expand
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
一、 實現拍照、選擇圖片並裁剪圖片效果 按照之前博客的風格,首先看下實現效果。 二、 uCrop項目應用 想起之前看到
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩