カウンターを 30 秒以上上げていると、あちこちで 1 秒スキップすることがよくあります。ディスプレイが表示された状態で、カウントダウンしています。ただし、乱数をスキップすることを選択します。スキップする数字は毎回同じ数字です。タイマーの長さを変更すると (ユーザーが変更します)、スキップされる番号が変更されます。コードを投稿しました。
免責事項: これは私の最初の (便利な) アプリなので、本当にうまくいかないか、うまく構成されていない可能性があります。大丈夫です、教えてください。私は批判を受け入れることができます。しかし、見てみてください。特定の秒数が失われる理由を誰かが知っている場合は、パイプしてください. ありがとう!
package com.ApphHose.runnersTimer;
//import a bunch of stuff
public class MainActivity extends Activity {
TextView text, lapNumber;
Button start;
boolean workrest, vibe;
int letsRun, lapCounter;
long length;
CountDownTimer timer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.tv);
lapNumber = (TextView) findViewById(R.id.tvLap);
start = (Button) findViewById(R.id.bStart);
letsRun = 2;
lapCounter = 1;
workrest = true;
vibe = true;
start.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
start.setText("Stop");
start.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
lapNumber.setText("Lap Number: 1");
lapCounter = 0;
run();
}
});
}
private void run() {
SharedPreferences getSetup = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
String setRun = getSetup.getString("run", "1");
long setRunset = Long.parseLong(setRun);
setRunset = setRunset * 1000;
String setWalk = getSetup.getString("walk", "1");
long setWalkset = Long.parseLong(setWalk);
setWalkset = setWalkset * 1000;
if (letsRun >= lapCounter) {
if (workrest == true) {
workrest = false;
length = setRunset;
} else {
workrest = true;
length = setWalkset;
}
final CountDownTimer timer = new CountDownTimer(length, 1000) {
@Override
public void onFinish() {
if (workrest){
if (vibe){
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(2000);
run();
} else {
run();
}
}else{
lapCounter ++;
lapNumber.setText("Lap Number: " + lapCounter);
run();
}
}
@Override
public void onTick(long millisUntilFinished) {
long min, sec;
// TODO Auto-generated method stub
min = millisUntilFinished / (60 * 1000);
sec = (millisUntilFinished / 1000) % 60;
String tmr = String.format("%d:%02d", min, sec);
text.setText("" + tmr);
}
};
timer.start();
start.setOnClickListener(new View.OnClickListener() {
//this is my button. start and stop.
public void onClick(View v) {
if (start.getText() == "Stop") {
start.setText("Start");
lapCounter = 1;
start.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);
timer.cancel();
lapNumber.setText("Lap Number: 1");
text.setText("Stopped");
} else {
start.setText("Stop");
start.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
run();
}
}
});
} else {
text.setText("Done!");
lapCounter = 1;
}
}
// pop up menu
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
MenuInflater blowUp = getMenuInflater();
blowUp.inflate(R.menu.setup, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.setup:
Intent i = new Intent("com.ApphHose.runnersTimer.SETUP");
startActivity(i);
break;
case R.id.out:
finish();
break;
}
return false;
}
}