2011-10-25 6 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ポイントを失います。

+0

あなたが「10秒間のゲイン・ポイント」とはどういう意味ですか?繰り返す。毎秒5ポイントを得る?または10ポイントを1回獲得してから、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)flagをtrueに設定しなければなりません。2)start timer(10秒後にflagをfalseに設定します)。3)適切なスコア変更を行うためにclickハンドラのフラグをチェックします。 – NOSTRA

関連する問題