Java 在android中,手电筒在按钮点击时闪烁

Java 在android中,手电筒在按钮点击时闪烁,java,android,Java,Android,我正在开发一个手电筒应用程序,在这个应用程序中,我试图在单击按钮时添加闪烁功能。我为此找到的代码是: String myString = "0101010101"; long blinkDelay 50; //Delay in ms for (int i = 0; i < myString.length(); i++) { if (myString.charAt(i) == '0') { params.setFlashMode(Parameters.FLASH_MODE_

我正在开发一个手电筒应用程序,在这个应用程序中,我试图在单击按钮时添加闪烁功能。我为此找到的代码是:

String myString = "0101010101";
long blinkDelay 50; //Delay in ms
for (int i = 0; i < myString.length(); i++) {
   if (myString.charAt(i) == '0') {
      params.setFlashMode(Parameters.FLASH_MODE_ON);
   } else {
      params.setFlashMode(Parameters.FLASH_MODE_OFF);
   }
   try {
      Thread.sleep(blinkDelay);
   } catch (InterruptedException e) {
      e.printStackTrace();
   }
}
String myString=“0101010101”;
长闪烁延迟50//毫秒延迟
对于(int i=0;i

但是这个代码会在几次闪烁后关闭手电筒。我如何启动闪光灯闪烁按钮点击,并停止它,除非我再次点击它?有什么帮助吗?

它由字符串长度控制,因此在i的计数大于最后一个索引后,for循环将中断。 如果要连续闪烁闪光灯,请使用while循环。 可以使用一个布尔变量在on和off之间切换。
以及一个while条件中的布尔值,用于在单击按钮时中断循环

它由字符串长度控制,因此for循环将在i的计数大于上一个索引后中断。 如果要连续闪烁闪光灯,请使用while循环。 可以使用一个布尔变量在on和off之间切换。 以及一个布尔值在while条件下,用于在单击按钮时中断循环

  • 您必须使用单独的线程来防止UI冻结
  • 线程将包含一个while循环,该循环允许线程持续闪烁
  • 要在按钮上断开循环,请在while条件下使用布尔变量
希望有帮助。

  • 您必须使用单独的线程来防止UI冻结
  • 线程将包含一个while循环,该循环允许线程持续闪烁
  • 要在按钮上断开循环,请在while条件下使用布尔变量
希望有帮助。

您必须使用线程来防止UI冻结。 线程将包含一个while循环,它将允许线程持续闪烁

//使用布尔变量来停止循环

您必须使用线程来防止UI冻结。 线程将包含一个while循环,它将允许线程持续闪烁


//使用布尔变量停止循环

丢弃
字符串
,使用无限循环,为按钮单击添加一个侦听器,并添加一个将设置循环为中断的标志,然后在中断后最后一次将其关闭。我尝试了无限循环,但随后应用程序被冻结。我无法在单击按钮时中断循环避免线程。在UI线程中睡眠。这是一种在两种预定义状态之间交替的非常奇怪的方式-形成一个0和1的字符串:然后迭代该字符串,调用一个方法提取每个字符:然后将该字符与0或1进行比较,以确定灯是亮还是关。。。通常,您只需使用某种布尔值,然后将其翻转
myBool=!myBool
。丢弃
字符串,使用无限循环,为按钮单击添加一个侦听器,并添加一个将设置循环中断的标志,然后在中断后最后一次将其关闭。我尝试了无限循环,但随后应用程序被冻结。我无法在单击按钮时中断循环避免线程。在UI线程中睡眠。这是一种在两种预定义状态之间交替的非常奇怪的方式-形成一个0和1的字符串:然后迭代该字符串,调用一个方法提取每个字符:然后将该字符与0或1进行比较,以确定灯是亮还是关。。。通常,您只需使用某种布尔值,然后将其翻转
myBool=!myBool
。你的意思是说使用while循环吗?是的while循环你的意思是说使用while循环吗?是的while循环
 while (shouldGlow ) {
          flashLight();
          try {
              Thread.sleep(1000);
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }

  }