Countdown mehrmals hintereinander ausführen

  • 2 Antworten
  • Neuester Beitrag
Diskutiere Countdown mehrmals hintereinander ausführen im Android App Entwicklung im Bereich Android OS.
H

heikoj10.1

Neues Mitglied
Hallo zusammen,

ich möchte für Sport einen Timer programmieren der mit in einem einstellbaren Intervall x Sekunden grün und danach y Sekunden rot anzeigt und das ganze zum Beispiel 10 mal hintereinander.

In den angehängten Quellen habe ich es hin bekommen, dass der Zähler x Sekunden runter zählt und dann auf rot springt. Aber halt nur einmal auch die Rot-Phase ist nicht einstellbar bzw. bleibt nicht für y- Sekunden.
Kann mir bitte jemand helfen, wie ich einen Countdown einmal in grün und einmal in rot paar mal hintereinander hin bekomme.

ich muss zugeben dass ich vom C-Programmieren her komme und in Java usw. Anfänger bin.

Meine Quellen:
public class Serie extends Activity implements View.OnClickListener {

Button btnAbruch;
TextView tvAnzeige;
Timer timer;
TimerTask task;
int pause, halten, wiederholungen, coutdownzeit;
CountDownTimer myCountdowntimer;

@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_serie);

tvAnzeige = (TextView) findViewById(R.id.tvAnzeige);
btnAbruch = (Button) findViewById(R.id.btnAbbruch);
btnAbruch.setOnClickListener(this);

Bundle extras = getIntent().getExtras();
pause = extras.getInt("Pause");
halten = extras.getInt("Halten");
wiederholungen = extras.getInt("Wiederholungen");

// Funktionsaufruf
functionWarten(pause);
functionWarten(pause); // war nur ein Test ob das zweimal hintereinander geht
}


@override
public void onClick(View v) {
Intent intent;
intent = new Intent(this, MainActivity.class);
startActivity(intent);
this.finish();
}



// Funktion Deklaration
private void functionWarten(int zeit) {
new CountDownTimer(zeit * 1000, 1000) {
@override
public void onTick(long millisUntilFinished) {
tvAnzeige.setBackgroundColor(Color.GREEN);
tvAnzeige.setText("" + millisUntilFinished / 1000);
}

@override
public void onFinish() {
tvAnzeige.setText("Fertig!");
tvAnzeige.setBackgroundColor(Color.RED);
}
}.start();
}
}
 
J

jogimuc

Stammgast
Hallo
Das was du da hast ist ja nur ein einzelner Countdown der einmal läuft.

Am Ende des Countdown wo rot angezeigt wird solltest du erstmals prüfen ob eine Wiederholung notwendig ist.
Wenn ja musst du einen zweiten Timer starten der dann wieder den Countdown starten.
Ich habe das mal mit einen Handler gemacht.
Sollte gehen.

Code:
    final int[] zähler = {0};
   
   
   
    // Funktion Deklaration
    private void functionWarten(final int zeit, final int anzahl) {
        if (anzahl > 0) {
            new CountDownTimer(zeit * 1000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                    tvAnzeige.setBackgroundColor(Color.GREEN);
                    tvAnzeige.setText("" + millisUntilFinished / 1000);
                }
                @Override
                public void onFinish() {
                    tvAnzeige.setText("Fertig!");
                    tvAnzeige.setBackgroundColor(Color.RED);
                    zähler[0]++;
                    if (zähler[0] < anzahl) {
                        Handler h = new Handler();
                        h.postDelayed(new Runnable() {
                            public void run() {
                                functionWarten(zeit, anzahl);
                            }
                        }, 3000);
                    }
                }
            }.start();
        }
    }
Beitrag automatisch zusammengefügt:

ich muss zugeben dass ich vom C-Programmieren her komme und in Java usw. Anfänger bin.
Das Ganze ist in C aber nicht so viel anders da würdest du auch zwei Timer brauchen ganz gleich welche Art von Timer.
 
Zuletzt bearbeitet:
H

heikoj10.1

Neues Mitglied
Hallo, vielen Dank, so tut es.
Du hast Recht, bei C hätte ich auch einen zweiten Timer benötigt, eigentlich logisch, habe ich übersehen.