Java 如果按钮不是';在那个时间段内你不会再按了吗?

Java 如果按钮不是';在那个时间段内你不会再按了吗?,java,android,Java,Android,很抱歉这个糟糕的标题,我不擅长描述这些东西 我正在构建一个节拍器,有一个(-)UI按钮可以将节拍降低1,还有一个(+)UI按钮可以将节拍提高1 我目前的问题是,每当我按下任何一个按钮,节拍器就会自动重新启动,因为有了新的节奏,并立即播放。因此,如果你连续按下(-)按钮10次,每次按下它,你都会听到节拍器的初始“嘟嘟”声 我希望我的应用程序执行以下操作: 当用户单击(-)或(+)按钮时,等待200毫秒 如果用户在该时间段内没有再次单击按钮,请播放节拍器 如果用户再次单击按钮,则不要播放节拍器,重

很抱歉这个糟糕的标题,我不擅长描述这些东西

我正在构建一个节拍器,有一个(-)UI按钮可以将节拍降低1,还有一个(+)UI按钮可以将节拍提高1

我目前的问题是,每当我按下任何一个按钮,节拍器就会自动重新启动,因为有了新的节奏,并立即播放。因此,如果你连续按下(-)按钮10次,每次按下它,你都会听到节拍器的初始“嘟嘟”声

我希望我的应用程序执行以下操作:

  • 当用户单击(-)或(+)按钮时,等待200毫秒
  • 如果用户在该时间段内没有再次单击按钮,请播放节拍器
  • 如果用户再次单击按钮,则不要播放节拍器,重复此过程:等待200毫秒,如果没有单击,则播放节拍器,等等
最终的结果是,如果我以100 bpm的速度重复按下(+)按钮20次,直到达到120 bpm,节拍器将不会开始播放,直到我完成敲击


我如何着手实施这一点?谢谢大家!

如果你想在动作和效果之间有所延迟,有几种方法可以实现。这是一个

 private boolean pressedAction = false;

@override
public void onClick(View v) {

    if (pressedAction) return;
    pressedAction = true;
    new Thread(new Runnable(
        @override
        public void run() {

            try {
                Thread.sleep(200); // 200 miliseconds
            } catch (Exception e) {}

            // Update views or do work (program logic)

            pressedAction = false;
        }
    }

}

然后,节拍器逻辑就是您的业务。

在您的活动中声明并实例化以下内容:

     private Handler timeoutHandler = new Handler();
     private Runnable delayStartThread = new Runnable() {
                public void run() {
                    startMetronome();
                }
            };
然后在
+
-
按钮的
onClickListener
中插入以下代码块:

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timeoutHandler.removeCallbacks(delayStartThread);
            tempoOfMetronome++; //tempoOfMetronome--; for decrease button
            stopMetronome();
            timeoutHandler.postDelayed(delayStartThread, 200);
        }
    });
有关代码如何工作的更多详细信息,请参阅下面的示例链接(我使用这些示例来制定答案):

  • -如何使用
    handler.postDelayed()
  • -如何取消处理程序.postDelayed()

  • 您还应该查看Android文档中的这些方法。

    听起来您刚刚描述了您应该编写的算法,以实现您希望它做的事情。哪一部分你不知道该怎么做?我对android和Java开发还不熟悉,所以这有点让人不知所措。我不确定什么是最好的/正确的实施方法。谢谢你的回答。除非我误解了你,否则我不认为这是我要找的。这看起来像是一个简单的延迟,但我要寻找的是更复杂的一点:如果用户连续按下按钮20次,我只希望最后一次点击来执行该功能-前19次点击应该什么都不做。在这种情况下,如果我连续按按钮20次,该函数仍会执行20次,除了有延迟。我希望这能让事情更清楚。谢谢