2016-10-17 12 views
0

Я использую TextureView для предварительного просмотра камеры, пока не найду способ установить его цвет фона, поэтому я переключился на SurfaceView, но предварительный просмотр больше не работает. Все остальное работает нормально, за исключением предварительного просмотра.android camera2 Предварительный просмотр не работает с видом на поверхность

Вот мой код, когда я использовал TextureView:

public void previewCamera(){ 
    try { 
     SurfaceTexture surfaceTexture = textureView.getSurfaceTexture(); 
     surfaceTexture.setDefaultBufferSize(previewSize.getWidth(),previewSize.getHeight()); 
     Surface previewSurface = new Surface(surfaceTexture); 

     captureRequestBuilder = device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     captureRequestBuilder.addTarget(previewSurface); 
     device.createCaptureSession(Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback() { 
      @Override 
      public void onConfigured(CameraCaptureSession session) { 
       updatePreview(session); 
      } 

      @Override 
      public void onConfigureFailed(CameraCaptureSession session) { 
       Toast.makeText(getApplicationContext(),"unable to setup cam preview",Toast.LENGTH_SHORT).show(); 
      } 
     },null); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    }} 

..И вот мой код, используя SurfaceView

public void previewCamera(){ 
    try { 
     Surface previewSurface = surfaceView.getHolder().getSurface(); 

     captureRequestBuilder = device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     captureRequestBuilder.addTarget(previewSurface); 
     device.createCaptureSession(Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback() { 
      @Override 
      public void onConfigured(CameraCaptureSession session) { 
       updatePreview(session); 
      } 

... и я добавляю этот код только в случае, если он имеет что-то делать с ним

private void updatePreview(CameraCaptureSession session) { 
    previewSession = session; 
    if (null == device) { 
     return; 
    } 
    try { 
     handlerThread = new HandlerThread("CameraPreview"); 
     handlerThread.start(); 
     handler = new Handler(handlerThread.getLooper()); 

     captureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); 
     previewSession.setRepeatingRequest(captureRequestBuilder.build(), null, ((isRecording)? null:handler)); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

Благодаря

+0

Куда вы вызываете previewCamera? В onCreate? onResume? Или в поверхностных обработанных/модифицированных обратных вызовах SurfaceView? Какие ошибки вы получаете в системных журналах, особенно из службы камеры? –

ответ

0

Вы пытались установить фиксированный размер перед извлечением объекта Surface?

surfaceView.setFixedSize(previewSize.getWidth(),previewSize.getHeight()); 
+0

есть. Пробовал это, но все еще не работает – Handsum

+0

setFixedSize метод принадлежит SurfaceHolder, а не Surface или SurfaceView – shift66

0

Вы не должны использовать Handler если вы используете SurfaceView к preview.Just как следующее:

manager.openCamera("0", mStateCallback, null); 

Кстати, размер SurfaceView не даст предварительный просмотр дону» t, поэтому вам не нужно устанавливать размер исправления.