2012-09-26 5 views
6

Mi chiedevo se ci fosse comunque l'uso della classe del timer da assegnare ad una textView per poter contare da 10 a 0 e visualizzarla in tempo reale?Come utilizzare una vista testo per il conto alla rovescia a zero?

Ho esaminato e ho trovato le funzioni di cronometro ma quello che capisco è che conta solo?

Mi piacerebbe imparare come farlo, quindi c'è un modo per farlo? e se sì, come? Sono completamente perplesso ..

risposta

8

se è necessario il conto alla rovescia, c'è la classe dell'omonimo nel pacchetto android.os chiamato CountDownTimer.

Qui (http://developer.android.com/reference/android/os/CountDownTimer.html) è possibile trovare l'uso corretto di questa classe. Questo è esattamente ciò di cui hai bisogno.

Questa classe è presente dal livello API 1 in modo da non poter cadere in problemi di compatibilità.

Esempio (dalla documentazione)

new CountDownTimer(30000, 1000) { 

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

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

Sì, utilizzare CountDownTimer. +1 – VendettaDroid

+0

Grazie mille !!! –

0

Sono d'accordo con Guglielmo Moretti, ma se si vuole ancora farlo con TextView sul proprio rispetto a implementare utilizzando il modello di progettazione Observer classico.

Puoi avere la tua TextView personalizzato come il codice qui sotto,

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

} 

Inoltre, la modalità di implementare con observalble come questo,

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 Attività come questa,

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

Prova CountDownAnimation. Fa esattamente quello che ti serve. Il project include un test.

Se si utilizza CountDownTimer con segni di graduazione ogni 1 secondo, non si otterrà l'ultimo segno di spunta. Quindi, ti consiglio di provare CountDownAnimation che utilizza uno Handler.

Problemi correlati