2012-09-26 5 views
6

Ich frage mich, ob es sowieso die Timer-Klasse zu einer textView zuweisen würde, um von 10 bis 0 Countdown und in Echtzeit anzuzeigen?Wie benutzt man eine TextView um auf Null zu zählen?

Ich habe es untersucht und die Chronometer-Funktionen gefunden, aber was ich verstehe ist, dass es nur zählt?

Ich würde gerne lernen, wie das geht, also gibt es eine Möglichkeit, es zu tun? und wenn ja, wie? Ich bin völlig verwirrt ..

Antwort

8

Wenn Sie Countdown benötigen, gibt es die Homonym-Klasse im Paket android.os CountDownTimer genannt.

Hier (http://developer.android.com/reference/android/os/CountDownTimer.html) können Sie die korrekte Verwendung dieser Klasse finden. Das ist genau das, was Sie brauchen.

Diese Klasse ist seit API Level 1 vorhanden, sodass Kompatibilitätsprobleme nicht auftreten können.

Beispiel (aus der Dokumentation)

new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
}.start(); 
+0

Ja, verwenden Sie CountDownTimer. +1 – VendettaDroid

+0

Vielen Dank !!! –

0

ich mit Guglielmo Moretti zustimmen, aber wenn Sie es noch mit Textview auf eigene Faust tun wollen, als Umsetzung des klassischen Observer-Entwurfsmuster verwenden.

Sie können Ihre benutzerdefinierten Textview wie dem folgenden Code haben,

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()); 
    } 

} 

Auch implementieren Modus mit observalble wie diese,

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); 
     } 
    } 

} 

Test-Aktivität wie diese,

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

Versuchen Sie CountDownAnimation. Es macht genau das, was Sie brauchen. Die project enthält einen Test.

Wenn Sie alle 1 Sekunde CountDownTimer mit Häkchen verwenden, erhalten Sie nicht das letzte Häkchen. Also, ich empfehle, dass Sie versuchen CountDownAnimation, die eine Handler verwendet.

Verwandte Themen