Обратный отсчет, пока положение объекта в определенном диапазоне - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь показать пользователю таймер, который отсчитывает от 3 до 0. Этот таймер должен быть виден, когда пользователь перетаскивает объект в определенном положении, и должен быть остановлен (и сброшен), когда пользователь перетаскивает объект из этой позиции ..

Пока я работаю с Log.d, фактическим отображением таймера, с которым я разберусь позже.

Пока у меня есть (нерабочий код):

 public void setX(float x) {
        isCheckOut = false;              
    // if basket is further than slotmargin 
     if (x + width/2 > SlotManager.SlotmarginX) {
        // if basket is NOT in CheckOut area    
         if (this.Y < MainGamePanel.height - 80 - height/2){
            x = SlotManager.SlotmarginX - width/2;

        } else {
            // if basket IS in CheckOut area
            x = MainGamePanel.width - width/2;
            isCheckOut = true;
            GameManager.CheckOut();
        }
        }

     this.X = x;
 }

А в GameManager:

public static void CheckOut() {

    Thread t = new Thread(new Runnable() {
      public void run() {
            while (basket.isCheckOut == true){

                for (int i=3;i>3;i--){
                    final Handler handler = new Handler(); 
                    Timer t = new Timer(); 
                    t.schedule(new TimerTask() { 
                            public void run() { 
                                    handler.post(new Runnable() { 
                                            public void run() { 
                                                Log.d("", "Countdown " + i);
                                            } 
                                    }); 
                            } 
                    }, 2000); 

                }

            }
      }
    });
    t.start();      
}

Мне кажется, что я куда-то добираюсь, но не могу обернуть голову вокруг комбинации таймера петли. Таймер должен остановиться, когда isCheckOut == false. Теперь я думаю, что запускаю таймер снова и снова ... И я не могу использовать int "i" для отображения текущего обратного отсчета int, потому что он не окончательный?

Помощь высоко ценится!

1 Ответ

1 голос
/ 19 марта 2012

Лучше использовать этот подход:

final int delayMillis = 1000;

final boolean count = true;

final Handler handler = new Handler();

final Runnable runnable = new Runnable()
{

    @Override
    public void run()
    {

        // your code

        if (count) // stop timer when count is false
        {
            handler.postDelayed(runnable, delayMillis);
        }

    }
};

Для запуска таймера используйте:

handler.postDelayed(runnable, delayMillis);
...