0

ランダムに表示し、数秒後に消えるボタンがいくつかあります。また、何か変更があれば、表示されているときにクリックできるようにしたいと思います。

ここに私が持っているものがあります:

public void fight() throws InterruptedException
{
    Random g = new Random();
    int move;
    for(int i = 0; i <= 3; i++)
    {
        move = g.nextInt(8);
        buttons[move].setVisibility(View.VISIBLE);
        buttons[move].setClickable(true);

        try{ Thread.sleep(5000); }catch(InterruptedException e){ }

        buttons[move].setVisibility(View.GONE);
        buttons[move].setClickable(false);
    }

}

私がそれを試してみると、全体が20秒間フリーズします(ループを通過するたびにおそらく5秒間フリーズし、何も起こりません。何かアイデアはありますか?

ありがとう。

4

3 に答える 3

0
private Handler mMessageHandler = new Handler();
Random g = new Random();
int move;

private Runnable mUpdaterRunnable = new Runnable() {
    public void run() {
        // hide current button
        buttons[move].setVisibility(View.INVISIBLE);
        // set next button
        move = g.nextInt(8);
        // show next button
        buttons[move].setVisibility(View.VISIBLE);

        // repeat after 5 seconds
        mMessageHandler.postDelayed(mUpdaterRunnable, 5000);
    }
};

開始するには、move = g.nextInt(8);(nullを回避するために)およびを使用しますmMessageHandler.post(mUpdaterRunnable);

停止するには、mMessageHandler.removeCallbacks(mUpdaterRunnable);

xbonezが言ったように、sを使用Timerしてこれを実現することもできます。TimerTask

于 2012-06-29T01:31:40.543 に答える
0

これを試して

public void fight() throws InterruptedException
{
    Random g = new Random();
    int move;
    runOnUiThread(new Runnable() 
    {
        public void run() {
            while(makeACondition) {
            move = g.nextInt(8);
            buttons[move].setVisibility(View.VISIBLE);
            buttons[move].setClickable(true);

            if (System.currentTimeMillis() % 5000 == 0) {

                buttons[move].setVisibility(View.GONE);
                buttons[move].setClickable(false);
            }
          } 
       }
   }

}
于 2012-06-29T01:07:44.300 に答える
0

この方法を試しましたか?

private int move;
public void fight() throws InterruptedException
{
    final Random g = new Random();
    runOnUiThread(new Runnable() 
    {
        public void run() {
            while(makeACondition) {
            move = g.nextInt(8);

            toggleButtonState(buttons[move]);
          } 
       }
   });
}

private void toggleButtonState(final Button button)
{
    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            if(button.isEnabled())
                button.setVisibility(View.GONE);
            else 
                button.setVisibility(View.VISIBLE);

        }
    }, 5000);

}
于 2012-06-29T05:51:57.573 に答える