2016-02-05 3 views
0

Я хочу добавить новую функцию в свое приложение: я создал индикатор выполнения и каждый раз, когда прогресс изменяется, вспышка будет мигать с задержкой, равной значению прогресса в миллисекундах.Камера вспыхивает мигающими стойками Приложение

Когда я изменяю ход, вспышка начинает мигать, но я ничего не могу сделать, пока не достигнет количества миганий (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) { 

      } 
    } 
}); 

ответ

0

, потому что ваш цикл на вас основной поток он блокирует все остальные операции. Из вашего кода, похоже, вы хотели сделать что-то вроде этого:

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();