2012-09-26 36 views
6

我想知道是否有反正使用計時器類來分配給textView,以便從10倒數到0並實時顯示它?如何使用textView倒數到零?

我已經看過它,並發現了計時功能,但我知道的是,它只計數?

我想學習如何做到這一點,那麼有沒有辦法做到這一點?如果是這樣,怎麼樣?我完全不解。

回答

8

如果你需要倒計時,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(); 
+0

可以使用CountDownTimer。 +1 – VendettaDroid

+0

非常感謝! –

0

我同意古列爾莫·莫雷蒂,但如果你仍然想用的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 
} 
} 
1

嘗試CountDownAnimation。它完全符合你的需求。 project包括一個測試。

如果您使用CountDownTimer每隔1秒打勾一次,則不會得到最後打勾。所以,我建議你試試CountDownAnimation,它使用Handler