我想按下START按钮开始重复两行代码,然后按下按钮STOP.我尝试使用TimerTask和Handles,但无法弄清楚如何.
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //final int i; final TextView textView = (TextView) findViewById(R.id.textView); final Button START_STOP = (Button) findViewById(R.id.START_STOP); final ImageView random_note = (ImageView) findViewById(R.id.random_note); final int min = 0; final int max = 2; final Integer[] image = { R.drawable.a0,R.drawable.a1,R.drawable.a2 }; START_STOP.setTag(1); START_STOP.setText("START"); START_STOP.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int status = (Integer) v.getTag(); if (status ==1) { textView.setText("Hello"); START_STOP.setText("STOP"); v.setTag(0); final Random random = new Random(); //************************************************************ // I would like to loop next 2 lines of code every 5 seconds.// int i = random.nextInt(2 - 0 + 1) + 0; random_note.setImageResource(image[i]); //************************************************************ } else { textView.setText("Bye"); START_STOP.setText("Let's PLAY!"); v.setTag(1); } } }); } @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; } }
解决方法
在其中一个答案中使用CountDownTimer是一种方法.另一种方法是使用Handler和
postDelayed方法:
private boolean started = false; private Handler handler = new Handler(); private Runnable runnable = new Runnable() { @Override public void run() { final Random random = new Random(); int i = random.nextInt(2 - 0 + 1) + 0; random_note.setImageResource(image[i]); if(started) { start(); } } }; public void stop() { started = false; handler.removeCallbacks(runnable); } public void start() { started = true; handler.postDelayed(runnable,2000); }
以下是使用Timer和TimerTask的示例:
private Timer timer; private TimerTask timerTask = new TimerTask() { @Override public void run() { final Random random = new Random(); int i = random.nextInt(2 - 0 + 1) + 0; random_note.setImageResource(image[i]); } }; public void start() { if(timer != null) { return; } timer = new Timer(); timer.scheduleAtFixedRate(timerTask,2000); } public void stop() { timer.cancel(); timer = null; }