Witam. Próbuję napisać w Android Studio aplikację do biegów interwałowych. No i mam problem z wymyśleniem algorytmu w pewnym stadium. Może najpierw omówię co program ma robić.
Bieg interwałowy polega na bieganiu ze zmiennym tempem, raz wolniej i raz szybciej. Program ma podpowiadać co aktualnie mamy robić, czy biegać szybkim, czy wolnym tempem - taki asystent.
W aplikacji podajemy czas rozgrzewki (czyli ile sekund marszujemy przed bieganiem), czas relaksu (ile sekund marszujemy po zakończeniu biegania), Hispeed (czyli ile sekund trwa jeden cykl szybkiego biegu), Lowspeed (czyli ile sekund trwa jeden cykl wolnego biegu) oraz liczbę cykli (szybki-wolny bieg).
Trening przedstawia poniższy rysunek.
Okno programu.
Po naciśnięciu START zaczynają się obliczenia. Całkowity czas treningu liczony jest OK, czas pozostały do końca też działa. Schody zaczynają się jak chcę aby textView8 zmieniało się na taki String, na jakim stadium aktualnie się znajdujemy (rozgrzewka, relaks, hispeed, lowspeed, koniec). Rozgrzewka, relaks i koniec zrobiłęm prostym działaniem, nie mogę jednak wymyślić algorytmu aby wraz z upływem czasy zmieniała się wartość textView8 na HiSpeed i LowSpeed, jest to trudne z tego względu że liczba cykli musi zostać uwzględniona.
Czy jest mi ktoś w stanie cokolwiek podpowiedzieć?
Jak już się z tym uporam dodatkowo w polu textView9 będzie odliczanie każdej czynności od wartości zadeklarowanej do 0, oraz przy odliczaniu HiSpeed wibrowanie i dźwięk co 500ms, a przy odliczaniu LowSpeed co 1000ms. Przyciski Cichy, WIbracje i Głośny też już działają.
public class MainActivity extends ActionBarActivity {
int rozgrzewka, relaks, hispeed, lowspeed, cykle, overall;
Button b1,b2,b3;
AudioManager am;
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button2);
b2=(Button)findViewById(R.id.button3);
b3=(Button)findViewById(R.id.button4);
am=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
am.setRingerMode(0);
}
});
b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
am.setRingerMode(1);
}
});
b3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
am.setRingerMode(2);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void start(View view) {
EditText editText = (EditText) findViewById(R.id.editText);
rozgrzewka = Integer.parseInt(editText.getText().toString());
EditText editText2 = (EditText) findViewById(R.id.editText2);
relaks = Integer.parseInt(editText2.getText().toString());
EditText editText3 = (EditText) findViewById(R.id.editText3);
hispeed = Integer.parseInt(editText3.getText().toString());
EditText editText4 = (EditText) findViewById(R.id.editText4);
lowspeed = Integer.parseInt(editText4.getText().toString());
EditText editText5 = (EditText) findViewById(R.id.editText5);
cykle = Integer.parseInt(editText5.getText().toString());
overall = rozgrzewka + relaks + ((hispeed + lowspeed) * cykle);
TextView textView13 = (TextView) findViewById(R.id.textView13);
textView13.setText("" + overall);
final TextView textView12 = (TextView) findViewById(R.id.textView12);
CountDownTimer Count = new CountDownTimer(overall * 1000, 1000) {
public void onTick(long millisUntilFinished) {
int seconds = (int) ((millisUntilFinished / 1000));
textView12.setText("" + millisUntilFinished / 1000);
int milis = (int) millisUntilFinished;
if ((overall - (milis / 1000)) < rozgrzewka) {
TextView textView8 = (TextView) findViewById(R.id.textView8);
textView8.setText("Rozgrzewka");
}
if ((overall - (milis / 1000)) > (overall - relaks)) {
TextView textView8 = (TextView) findViewById(R.id.textView8);
textView8.setText("Relaks");
}
}
public void onFinish() {
textView12.setText("0");
TextView textView8 = (TextView) findViewById(R.id.textView8);
textView8.setText("Koniec");
}
};
Count.start();
}
}