如何调用Timer作为方法?

时间:2014-01-09 23:01:25

标签: android

这是我的代码:

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?若然,有人可以向我解释这些吗?

1 个答案:

答案 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();
    }
});

取值