[英]android camera2 preview not working with surface view
I have been using TextureView for my camera preview until I cannot find a way to set its background color so I switched to SurfaceView but the preview is not working anymore. 我一直在使用TextureView进行相机预览,直到无法找到设置其背景色的方法为止,所以我切换到SurfaceView,但是预览不再起作用。 Everything else is working fine, except for the preview.
除预览外,其他所有工作均正常。
Here is my code when I used TextureView: 这是我使用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();
}}
..and here is my code using SurfaceView ..这是我使用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);
}
...and I am adding this code just in case it has something to do with it ...并且我正在添加此代码,以防万一与它有关
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();
}
}
Thanks 谢谢
在检索Surface对象之前,您是否尝试过设置固定大小?
surfaceView.setFixedSize(previewSize.getWidth(),previewSize.getHeight());
You should not use Handler if you use SurfaceView to preview.Just like following: 如果使用SurfaceView进行预览,则不应使用Handler。就像下面这样:
manager.openCamera("0", mStateCallback, null);
By the way,the size of SurfaceView won't let the preview don't work,so you don't have to set a fix size. 顺便说一下,SurfaceView的大小不会让预览无法工作,因此您不必设置固定大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.