J
JmasterJ
Neues Mitglied
- 3
Hallo, ich schreibe gerade an einem App als BlindTimer. Soweit funktioniert es auch, allerdings Startet der Zähler erst beim zweiten Klick auf den Button und sagt vorher schon "done".
Ich vermute das hängt damit zusammen das der Timer beim Start nicht direkt die eingegebene Zahl einliest, sondern erst mit dem wert "0" arbeitet. Auf weitere Klicks reagiert es dann normal, allerdings zieht der erste fehler folgefehler nach sich, wie z.b. das auf dem Button dann schon "Pause" statt "Start" steht.
Das ist aber logisch wenn er vorher nen anderen wert nimmt als den eingegebenen.
Hier der Code, hoffe mir kann jemand helfen!
BlindTimer.java
main.xml
strings.xml
Wäre super wenn einer das geradebiegen könnte, ich find den Fehler einfach nicht und hab das einlesen der "lenght" -Variable schon fast überall hin geschoben!
Greetz
Ich vermute das hängt damit zusammen das der Timer beim Start nicht direkt die eingegebene Zahl einliest, sondern erst mit dem wert "0" arbeitet. Auf weitere Klicks reagiert es dann normal, allerdings zieht der erste fehler folgefehler nach sich, wie z.b. das auf dem Button dann schon "Pause" statt "Start" steht.
Das ist aber logisch wenn er vorher nen anderen wert nimmt als den eingegebenen.
Hier der Code, hoffe mir kann jemand helfen!
BlindTimer.java
Code:
package de.blindtimer;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class BlindTimer extends Activity {
TextView timeDisplay;
MyCount counter;
int state = 0;
int zw;
int length;
long startTime = 0;
long currentTime = 0;
long timeElapsed = 0;
long timeRemaining = 0;
long prevTimeRemaining = 0;
Button control;
EditText edit;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timeDisplay = (TextView) findViewById(R.id.timer);
edit = (EditText) findViewById(R.id.Textfeld);
control = (Button) findViewById(R.id.control);
counter = new MyCount(length, 100);
}
public int berechne(int a){
int min = a * 60;
int sec = min * 1000;
return sec;
}
public void control(View view) {
switch (state) {
case 0:
zw = Integer.parseInt(edit.getText().toString());
length = berechne(zw);
startTime = System.currentTimeMillis();
counter.start();
control.setText(R.string.pause);
state = 1;
break;
case 1:
// pause
currentTime = System.currentTimeMillis();
timeElapsed = currentTime - startTime;
if (prevTimeRemaining == 0)
timeRemaining = length - timeElapsed;
else
timeRemaining = prevTimeRemaining - timeElapsed;
counter.cancel();
timeDisplay.setText("Left: " + formatTime(timeRemaining));
control.setText(R.string.resume);
prevTimeRemaining = timeRemaining;
// resume
counter = new MyCount(timeRemaining, 100);
state = 0;
break;
case 2:
prevTimeRemaining = 0;
counter = new MyCount(length, 100);
control.setText(R.string.start);
timeDisplay.setText(R.string.timer);
state = 0;
}
}
public String formatTime(long millis) {
String output = "00:00:00";
long seconds = millis / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
seconds = seconds % 60;
minutes = minutes % 60;
hours = hours % 60;
String secondsD = String.valueOf(seconds);
String minutesD = String.valueOf(minutes);
String hoursD = String.valueOf(hours);
if (seconds < 10)
secondsD = "0" + seconds;
if (minutes < 10)
minutesD = "0" + minutes;
if (hours < 10)
hoursD = "0" + hours;
output = hoursD + " : " + minutesD + " : " + secondsD;
return output;
}
public class MyCount extends CountDownTimer {
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void onFinish() {
timeDisplay.setText("done!");
state = 2;
control.setText(R.string.restart);
}
public void onTick(long millisUntilFinished) {
timeDisplay.setText("Left: " + formatTime(millisUntilFinished));
}
}
}
main.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText android:layout_height="wrap_content" android:layout_width="fill_parent" android:gravity="center" android:id="@+id/Textfeld" android:text="10"></EditText><TextView
android:id="@+id/timer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:padding="10sp"
/>
<Button
android:id="@+id/control"
android:text="@string/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="control"
android:padding="20sp"
></Button>
</LinearLayout>
strings.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Countdown!</string>
<string name="app_name">Countdown</string>
<string name="start">Start</string>
<string name="pause">Pause</string>
<string name="resume">Resume</string>
<string name="restart">Restart</string>
<string name="timer">Left: 100</string>
</resources>
Wäre super wenn einer das geradebiegen könnte, ich find den Fehler einfach nicht und hab das einlesen der "lenght" -Variable schon fast überall hin geschoben!
Greetz