-1

我在自定义相机应用程序中遇到问题。在闪光灯功能打开的情况下,手机会将第一张照片与闪光灯一起拍摄,但在第二张照片上则不会使用闪光灯。安卓相机应用程序闪光灯

flashCameraButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isPressed) { 
       flashCameraButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.onflash)); 

       flashOnButton(); 
      } else if (isPressed) { 
       flashCameraButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.offflash)); 
       isPressed = !isPressed; 
       flashOffButton(); 
      } else 
       flashCameraButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.onflash)); 
      flashOnButton(); 
     } 
    }); 

    private void flashOnButton() { 
    if (camera != null) { 
     try { 
      Camera.Parameters param = camera.getParameters(); 
      param.setFlashMode(!flashmode ? Camera.Parameters.FLASH_MODE_ON 
        : Camera.Parameters.FLASH_MODE_ON); 
      camera.setParameters(param); 
      flashmode = !flashmode; 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 

    } 
} 
    private void flashOffButton() { 
    if (camera != null) { 
     try { 
      Camera.Parameters param = camera.getParameters(); 
      param.setFlashMode(!flashmode ? Camera.Parameters.FLASH_MODE_OFF 
        : Camera.Parameters.FLASH_MODE_OFF); 
      camera.setParameters(param); 
      flashmode = !flashmode; 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 

    } 
} 
+1

您正在检查if和else if中的相同条件。 –

+0

好吧然后我用这个Anoop kanyan –

+0

这段代码来自一些教程吗? –

回答

0

看看下面的代码。你可以做类似的事情吧:

btnSwitch.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (isFlashOn) { 
       // turn off flash 
       //change the picture 
       turnOffFlash(); 
      } else { 
       // turn on flash 
       //change the picture 
       turnOnFlash(); 
      } 
     } 
    }); 
} 


// Get the camera 
private void getCamera() { 
    if (camera == null) { 
     try { 
      camera = Camera.open(); 
      params = camera.getParameters(); 
     } catch (RuntimeException e) { 
      Log.e("Camera Error. Failed to Open. Error: ", e.getMessage()); 
     } 
    } 
} 


// Turning On flash 
private void turnOnFlash() { 
    if (!isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 


     params = camera.getParameters(); 
     params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 
     isFlashOn = true; 


    } 

} 


// Turning Off flash 
private void turnOffFlash() { 
    if (isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 


     params = camera.getParameters(); 
     params.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(params); 
     camera.stopPreview(); 
     isFlashOn = false; 


    } 
} 

我们这里做的是检查是否Flash是ON或OFF,如果是,我们调用方法turnOffFlash()将其关闭,如果它是OFF,我们调用方法turnOnFlash()将其打开。

+0

好的,谢谢Anoop Kanyan,我怎样才能在这个方法中声明(isFlashon) –

+0

在所有方法之外声明它,并且最初将它设置为false。 –

+0

好的谢谢,但我想当闪光灯毫无疑问,它点击闪光第一次图像和第二次点击图像与闪光灯自动关闭。我想如果闪光灯上它应该直到我改变闪光模式 –