Android 용이 애플리케이션에서 버튼 체이서 (Button Chaser)라고합니다. 일시 중지하고 메커니즘을 재개해야합니다. 일시 중지 메커니즘을 만들었지 만 정상적으로 작동하지만 Resume을 만드는 데 문제가 있습니다. 어떻게 재개 메커니즘을 만들 수 있습니까?재개 및 일시 중지 메커니즘
package com.example.buttonchaser;
import java.util.Random;
import java.util.Timer;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.*;
import android.widget.*;
import android.graphics.Point;
import android.view.View.OnClickListener;
public class ButtonChaserActivity extends ActionBarActivity implements OnClickListener{
private Button btn;
private TextView lblScore;
private Timer timer;
private int x, y, w, h, score;
ButtonChaserTimerTask task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_chaser);
//Inflate UI
btn = (Button)findViewById(R.id.btn);
lblScore = (TextView)findViewById(R.id.lblScore);
btn.setOnClickListener(this);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
w = size.x - btn.getWidth() - 48;
h = size.y - btn.getHeight() - 48;
timer = new Timer();
task = new ButtonChaserTimerTask(this);
timer.schedule(task, 0, 1500);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.button_chaser, 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.
switch(item.getItemId()){
case R.id.mnuEasy:
newGame();
return true;
case R.id.mnuMed:
medGame();
return true;
case R.id.mnuHard:
hardGame();
return true;
case R.id.mnuNew:
newGame();
return true;
case R.id.mnuQuit:
quit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void newGame(){
score = 0;
lblScore.setText("Score: " + score);
timer = new Timer();
task = new ButtonChaserTimerTask(this);
timer.schedule(task, 0, 1500);
}
public void medGame(){
score = 0;
lblScore.setText("Score: " + score);
timer = new Timer();
task = new ButtonChaserTimerTask(this);
timer.schedule(task, 0, 500);
}
public void hardGame(){
score = 0;
lblScore.setText("Score: " + score);
timer = new Timer();
task = new ButtonChaserTimerTask(this);
timer.schedule(task, 0, 250);
}
public void quit(){
timer.cancel();
finish();
}
public void moveButton(){
Random generator = new Random();
generator.setSeed(System.currentTimeMillis());
float f = generator.nextFloat();
x = (int)(f*w)%w;
f = generator.nextFloat();
y = (int)(f*h)%h;
btn.setX(x);
btn.setY(y);
}
public void pauseOnClick(View view) {
Button pause = (Button) view;
((Button)view).setText("Resume");
timer.cancel();}
//((Button)view).setText("Pause");
//moveButton();
@Override
public void onClick(View v) {
score +=1;
lblScore.setText("Score: " + score);
}
}
참고로, 게임 유형에 대해 가지고있는 3 가지 메소드는 단일 메소드로 줄이기 위해 단일 int를 사용해야합니다. 코드 반복은 악취가 난다. – ChiefTwoPencils