代码暂停不按我期望的方式工作

时间:2014-05-01 00:07:49

标签: android delay

我正在尝试为Simon的游戏中的按钮设置动画,它会生成一个随机按下的4个按钮序列,通过按钮动画显示顺序,然后获取用户输入以匹配生成的序列。我找到了一个使用Handlers在android中使用的暂停方法。我以为我正确地捕获了这些功能,但不是暂停每个请求,而是在执行开始时暂停,然后立即激活所有按钮,因此当它一次闪烁所有三个按钮时,知道序列几乎是不可能的。就按钮动画而言,这就是我所拥有的。

//将按钮发送到动画,显示存储的匹配

的序列
private void show(final Button first,final Button second,final Button third,final Button fourth)
   {
       int caseChoice = 0;

       for (int i = 0; i < currentCount; i++)
       {               
           caseChoice = matching[i];
           switch (caseChoice)
           {
           case 0:
               mHandler.postDelayed(new Runnable() {
                    public void run() {
                        animDelay(first);
                    }
                }, 6000);   
               break;
           case 1:
               mHandler.postDelayed(new Runnable() {
                    public void run() {
                        animDelay(second);
                    }
                }, 6000);
               break;
           case 2:
               mHandler.postDelayed(new Runnable() {
                    public void run() {
                        animDelay(third);
                    }
                }, 6000);
               break;
           case 3:
               mHandler.postDelayed(new Runnable() {
                    public void run() {
                        animDelay(fourth);
                    }
                }, 6000);                  
               break;

           }
       }
   }

   //used to delay button animation, the button it is sent (reusable)
   private void animDelay(Button theButton)
   {
       Animation animAlpha = AnimationUtils.loadAnimation(this, R.anim.anim_alpha);
       theButton.startAnimation(animAlpha);
   }

1 个答案:

答案 0 :(得分:0)

您当前的代码会重复执行,并在6秒内发布延迟操作。

循环迭代非常快,因此“6秒内发生的事情”的所有帖子都非常接近。

如果您希望稍后发布每个连续的操作,您应该执行以下操作:

mHandler.postDelayed(new Runnable() {
                    public void run() {
                        animDelay(first);
                    }
                }, (i * 6000) );