这是我的代码:
package com.example.wackamole;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends Activity {
static int scoreCount;
static Timer t;
static int count;
static int timeInterval;
protected TextView textView, counter;
protected ImageButton button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t = new Timer();
scoreCount = 0;
count = 0;
timeInterval = 1000;
button = (ImageButton)findViewById(R.id.mole);
button.setBackgroundDrawable(null);
textView = (TextView)findViewById(R.id.score);
t.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (count%2 == 0)
button.setImageResource(R.drawable.mole);
else
button.setImageResource(R.drawable.hole);
count++;
textView.setText("Score:" + count);
}
});
}
},0, timeInterval);
findViewById(R.id.mole).setOnClickListener(new View.OnClickListener() {
public void onClick (View v){
if (timeInterval > 100)
timeInterval -= 50;
if (t != null){
t.cancel();
t.purge();
t = null;
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我希望能够在单击按钮时停止计时器,然后再次重新启动计时器(此时,计时器间隔较小,因此速度会更快)。它是否像onCreate()?还是onResume?若然,有人可以向我解释这些吗?
答案 0 :(得分:1)
如果我理解你,你正在尝试创建一个单独的计时器,按下按钮就会取消并重置。如果是这样,我认为这应该适合你。
在onCreate之外,您可以创建一个处理取消和创建计时器的方法:
private void setupTimer() {
t.cancel();
t.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (count % 2 == 0)
button.setImageResource(R.drawable.mole);
else
button.setImageResource(R.drawable.hole);
count++;
textView.setText("Score:" + count);
}
});
}
}, timeInterval);
}
Timer.schedule()似乎符合您的需求。您可以阅读更多有关Timer提供的不同方法的信息:http://developer.android.com/reference/java/util/Timer.html
Timer.scheduleAtFixedRate()以给定的间隔持续触发。间隔的速率是固定的,不适合你每次按下按钮减少定时器间隔的需要。
现在在onCreate中,您可以在用户点击按钮时调用此新方法:
findViewById(R.id.mole).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (timeInterval > 100)
timeInterval -= 50;
setupTimer();
}
});
取值