我想知道是否有反正使用計時器類來分配給textView,以便從10倒數到0並實時顯示它?如何使用textView倒數到零?
我已經看過它,並發現了計時功能,但我知道的是,它只計數?
我想學習如何做到這一點,那麼有沒有辦法做到這一點?如果是這樣,怎麼樣?我完全不解。
我想知道是否有反正使用計時器類來分配給textView,以便從10倒數到0並實時顯示它?如何使用textView倒數到零?
我已經看過它,並發現了計時功能,但我知道的是,它只計數?
我想學習如何做到這一點,那麼有沒有辦法做到這一點?如果是這樣,怎麼樣?我完全不解。
如果你需要倒計時,android.os包中有一個叫做CountDownTimer的同音異義類。
這裏(http://developer.android.com/reference/android/os/CountDownTimer.html)你可以找到這個類的正確用法。這正是你需要的。
該類自API Level 1開始出現,因此您不能陷入兼容性問題。
示例(從文檔)
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished/1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
我同意古列爾莫·莫雷蒂,但如果你仍然想用的TextView做你自己不是執行採用了經典的觀察者設計模式。
您可以自定義的TextView像下面的代碼,
package com.example.stackoverflow;
import java.util.Observable;
import java.util.Observer;
import android.content.Context;
import android.widget.TextView;
public class MyTextView extends TextView implements Observer{
public MyTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public void update(Observable observable, Object data) {
// TODO Auto-generated method stub
this.setText(""+((Integer)data).intValue());
}
}
而且,與observalble這樣的實施模式,
package com.example.stackoverflow;
import java.util.Observable;
public class MyTextViewModel extends Observable {
private int counter;
public MyTextViewModel(int initnumber){
this.counter = initnumber;
}
public void decrementCounter(){
if(this.counter>0){
this.counter--;
setChanged();
notifyObservers(this.counter);
}
}
}
測試活動就是這樣,
package com.example.stackoverflow;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv;
LinearLayout ll;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// tv = (TextView) findViewById(R.id.textView1);
ll = (LinearLayout)findViewById(R.id.ll1);
MyTextView mtv = new MyTextView(getApplicationContext());
MyTextViewModel mm = new MyTextViewModel(10);
mm.addObserver(mtv);
mtv.setText("Not yet init");
ll.addView(mtv);
mm.decrementCounter(); // call this function in a thread and as many times as you want
}
}
嘗試CountDownAnimation
。它完全符合你的需求。 project包括一個測試。
如果您使用CountDownTimer
每隔1秒打勾一次,則不會得到最後打勾。所以,我建議你試試CountDownAnimation
,它使用Handler
。
可以使用CountDownTimer。 +1 – VendettaDroid
非常感謝! –