相机闪光灯闪烁失速应用程序

时间:2016-02-05 21:38:20

标签: java android flashlight

我想在我的应用中添加一项新功能:我创建了一个进度条,每次进度发生变化时,闪光灯都会闪烁,延迟时间等于进度值(以毫秒为单位)。

当我修改进度时,闪光灯开始闪烁但我无法做任何事情,直到它达到闪烁次数(20)。我希望能够修改延迟,即使闪光灯仍在闪烁。

private void blink(int sleepMS) throws Exception{

    //int sleepMS=(1/10)*50;
    int flashCount=20;
    getCamera();
    camera.setPreviewTexture(new SurfaceTexture(0));
    camera.startPreview();
    Thread thr = new Thread();
    thr.start();

   for(int i=0;i<flashCount;i++) {
           flipFlash();
           thr.sleep(sleepMS);
           flipFlash();
           thr.sleep(sleepMS);
       }

    camera.stopPreview();
    //camera.release();


}

private void flipFlash(){
    if (isFlashOn) {
        params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        camera.setParameters(params);
        isFlashOn = false;
    } else{
        params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        camera.setParameters(params);
        isFlashOn = true;
    }
}

getCamera()获取相机参数的位置。以及SeekBar侦听器的代码:

volumeControl = (SeekBar) findViewById(R.id.volume_bar);
volumeControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

  int progressChanged = 0;

  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
      progressChanged = progress;

  }

  public void onStartTrackingTouch(SeekBar seekBar) {
      // TODO Auto-generated method stub

  }

  public void onStopTrackingTouch(SeekBar seekBar) {

          try {
              blink(100 - progressChanged);
          } catch (Exception e) {

          }
  }
});

1 个答案:

答案 0 :(得分:0)

因为你的for循环在你的主线程上,它阻止所有其他操作。从您的代码中,您似乎打算做这样的事情:

Thread thr = new Thread(new Runnable() {
    @Override
    public void run() {
        for(int i=0;i<flashCount;i++) {
            flipFlash();
            thr.sleep(sleepMS);
            flipFlash();
            thr.sleep(sleepMS);
        }
    }
});
thr.start();