2016-10-17 102 views
0

我一直在使用TextureView進行相機預覽,直到找不到方法來設置其背景色,所以我切換到SurfaceView,但預覽不再工作。其他一切工作正常,除了預覽。android camera2預覽不能用於表面視圖

這裏是我的代碼,當我用TextureView:使用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); 
      } 

我的代碼

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

..和...,然後我加入這個代碼,以防萬一它有是與它

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 surfaceCreated/Modified回調中?您在系統日誌中遇到了哪些錯誤,特別是來自攝像頭服務的錯誤? –

回答

0

您是否嘗試在檢索Surface對象之前設置固定大小?

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

是的。試過,但仍然不起作用 – Handsum

+0

setFixedSize方法屬於SurfaceHolder,而不是Surface或SurfaceView – shift66

0

如果使用SurfaceView到preview.Just像以下,則不應使用處理器

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

順便說一句,SurfaceView的大小不會讓預覽唐」工作,所以你不必設置修復大小。

相關問題