2014-01-09 2 views
1

Это мой код:Как я могу вызвать Timer как метод?

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

Я не совсем уверен, что проблема есть. Не могли бы вы сделать свой вопрос яснее? – hichris123

ответ

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(), казалось, в соответствии с вашими потребностями. Вы можете узнать больше о различных методах, которые предлагает Таймер: 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(); 
    } 
}); 

S

+1

Большое спасибо за ответ! – Lightgod131

+0

Нет проблем. Рад, что смог помочь! –

Смежные вопросы