Countdown mehrmals hintereinander ausführen

H

heikoj10.1

Neues Mitglied
4
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();
}
}
 
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();
        }
    }
Beiträge automatisch zusammengeführt:

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:
  • Danke
Reaktionen: heikoj10.1
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.
 

Ähnliche Themen

C
Antworten
8
Aufrufe
1.126
swa00
swa00
H
Antworten
0
Aufrufe
933
HoustonWeHaveAProblem
H
A
  • Arif12
Antworten
2
Aufrufe
1.820
Arif12
A
Zurück
Oben Unten