2011-10-25 2 views
1

일정 시간이 지나면 무언가를하는 방법에 대한 기사 만보고 있지만 일정 시간 동안 뭔가를 수행하는 방법을 알고 싶습니다. 기계적 인조 인간.Android에서 특정 시간 동안 버튼에 포인트를 부여 할 수 있습니다.

public void buttonClick(View v) { 

     currentUser.changeScore(10); 

     TextView tv = (TextView) findViewById(R.id.score); 
     tv.setText("Score: " + currentUser.getScore()); 

    } 

나는 이벤트가 발생 후 10 초 동안 버튼 이득 포인트를 누를 수 있도록 사용자에게합니다. 10 초가 지난 후에 버튼을 누르면 사용자가 10 점을 잃고 싶습니다.

+0

당신은 "10 초 이득 포인트"에 의해 무엇을 의미합니까? 반복적으로, 예 : 초당 5 점을 얻으시겠습니까? 또는 10 포인트를 한 번 얻은 다음 10 초 후에 다시 잃어 버릴 수 있습니까? –

+0

10 초 동안 버튼을 누를 때마다 10 점을 얻습니다. 예를 들어 내가 10 초 이내에 5 번 누르면 50 점을 얻습니다. 버튼을 10 초 이상 누를 때마다 10 점을 잃습니다. –

+0

그래서 * 시작하는 것은 10 초입니까? 점수도 바꿔야합니까? –

답변

3

간단합니다. 당신의 이벤트가 발생할 때마다 다음과 같이 변수를 설정합니다

long positivePointEndTime = 0; 

// In your event handler... 
positivePointEndTime = System.currentTimeMillis() + 10000; 

// Then in the button click handler 
int scoreChange = System.currentTimeMillis() < positivePointEndTime ? 10 : -10; 
currentUser.changeScore(scoreChange); 

그것은 당신이 정말 그 간격 동안 정기적으로 변화에 무엇을 원하는 것 같지 - 이벤트가 단지에 새로운 지점을 설정하는 것입니다 버튼을 클릭하는 것이 "좋을 때"의 경계 시간. 타이머 같은 것이 필요하지 않습니다.

(테스트 용이성을 위해 당신은 의존성 주입 Clock 형 또는 "현재 시간"기능을 제공하는 비슷한 뭔가를 할 수 있지만 기본 원리는 동일합니다.)

+0

꽤 많은 말을하려고했습니다. 잘 작동해야합니다. –

+0

완벽하게 작동했습니다! –

+0

"?"의 의미가 무엇인지 묻는 것을 잊어 버렸습니다. 였다. 나는 전에 그것을 본 적이 없다. –

0

당신은 사용할 수 있습니다 타이머 :

timerIsOn = true; // timerIsOn is boolean variable, must be visible for button click handler 
TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     timerIsOn = false; 
    } 
}; 
Timer timer = new Timer(); 
timer.schedule(task, 10000); 

그런 다음 버튼을 클릭 핸들러는 다음과 같습니다

public void buttonClick(View v) { 
    if (timerIsOn) { 
     currentUser.changeScore(10); 
    } else { 
     // reduce score 
    } 
    TextView tv = (TextView) findViewById(R.id.score); 
    tv.setText("Score: " + currentUser.getScore()); 
} 
+0

타이머가 이벤트 핸들러에 있어야합니까? –

+0

조용한 질문을 잘 이해하지 못합니다. 1) 플래그를 true로 설정해야합니다. 2) 타이머를 시작합니다 (10 초 후에 플래그를 false로 설정합니다). 3) 클릭 핸들러에서 플래그를 확인하여 적절한 점수를 변경합니다. – NOSTRA

관련 문제