如何阻止我的程序排队按下按钮

时间:2012-05-05 20:49:07

标签: android audio nested-loops thread-sleep vibration

大家好,这是我的第一篇文章,所以请保持温柔。即使我的android决赛已经完成,但我仍然觉得很难不继续调整我的程序并添加它只是为了它的乐趣。它是一个简单的程序,当你触摸屏幕时,屏幕上的角色会笑出两种匹配振动的方式之一。它工作得很好,但是当我的老师(当时心情不好)去测试时,他几乎按下了按钮,这使得每次按下按钮都会让它排成一行,我们不得不坐下来,就像我们能够做到的那样。用手机做更多的事情。我想要做的只是在第一个事件完成之前有一个触摸事件计数。它是一个带有几个嵌套if语句的简单触摸事件。

public boolean onTouch(final View v, MotionEvent m) 
    {
        v.setBackgroundResource(R.drawable.laughing);//changes the image to the laughing monkey
            if (m.getAction() == MotionEvent.ACTION_DOWN)
            {
                if (timesTouched != I) //checks to see if the touch amount is not equal to the random number
                {
                    if(laughter != 0) 
                    {       
                        sp.play(laughter, 1, 1, 1, 0, 1);//plays the loaded sound when the screen is pressed
                        //vib.vibrate(900);
                    }
                    Time = 900;
                    timesTouched++;
                    intDelay = 1;
                    if(vibon == 1)
                    {
                        vib.vibrate(Time);
                    }
                }

                else if (timesTouched == I)//checks to see if the touch amount is the same as the random number
                {
                    if(laughter != 0)
                    {
                        sp.play(laughFit, 1, 1, 1, 0, 1);//plays the loaded sound when the screen is pressed
                    }
                    Time = 6000;
                    timesTouched = 0;
                    intDelay = 1;
                    if(vibon == 1)
                    {
                        vib.vibrate(laugh, -1);
                    }
                }

            }

            else if((m.getAction() == MotionEvent.ACTION_UP) && (intDelay == 1))
            {
                try {
                    Thread.sleep(Time);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                v.setBackgroundResource(R.drawable.normal) ;//returns the image to the normal looking monkey
                intDelay = 0;
            }
        return true;
    }
}

睡眠定时器用于防止背景图像在笑声结束前返回默认值。我确实试图让我的老师帮忙,但他只是一个快速的替代品,在今年年初开始教学之前从未触及过Android设备。非常感谢您提供的任何帮助,因为到目前为止,我必须在谷歌搜索的帮助下自己教这些东西。

谢谢你们!

1 个答案:

答案 0 :(得分:0)

如果这是我,我可能会将声音播放到一个单独的线程,然后使用消息通知该线程何时开始和停止声音。通过这种方式,按钮可以立即发送消息,而不会被任何后续操作阻止。副作用应该是每次按下按钮都会停止前一次笑声并开始一个新的笑声(或者只是将另一个声音字节排在上一个声音字节上,有效地组合声音)。您可以反过来禁用按钮,直到声音结束,但我不相信这将是一个良好的用户体验 - 他们希望能够混合和混合他们的心脏内容!

查看http://developer.android.com/resources/articles/painless-threading.html以获取有关如何处理此类事情的更多指导。