要设置相机预览,你可以使用 Camera2 API 来实现。以下是一个简单的示例代码,用于设置相机预览:
1. 首先,在你的 AndroidManifest.xml 文件中,添加以下权限:
```xml
```
2. 创建一个 CameraManager 对象,用于管理相机资源。在你的 Activity 或 Fragment 中的 onCreate() 方法中添加以下代码:
```java
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
```
3. 获取可用的相机列表。在 onCreate() 方法中添加以下代码:
```java
String[] cameraIds = manager.getCameraIdList();
```
4. 打开相机,并设置预览。在你想要打开相机的地方添加以下代码:
```java
CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(CameraDevice camera) {
try {
// 创建一个用于预览的 CaptureRequest.Builder
CaptureRequest.Builder previewRequestBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
// 获取 SurfaceTexture 对象,用于接收预览数据
SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
// 设置预览的尺寸
Size previewSize = getPreviewSize(camera.getCameraId()); // 获取相机支持的尺寸列表,并选择合适的尺寸
surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
// 创建一个用于预览的 Surface
Surface previewSurface = new Surface(surfaceTexture);
// 将预览的 Surface 加到 CaptureRequest.Builder 中
previewRequestBuilder.addTarget(previewSurface);
// 创建一个 CaptureSession
camera.createCaptureSession(Collections.singletonList(previewSurface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(CameraCaptureSession session) {
// 开始预览
session.setRepeatingRequest(previewRequestBuilder.build(), null, null);
}
@Override
public void onConfigureFailed(CameraCaptureSession session) {
// 配置失败的回调
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onDisconnected(CameraDevice camera) {
// 相机断开连接的回调
}
@Override
public void onError(CameraDevice camera, int error) {
// 相机错误的回调
}
};
// 打开相机
manager.openCamera(cameraIds[0], stateCallback, null);
```
在上面的代码中,我们使用一个 CaptureRequest.Builder 来设置预览,然后将预览的 Surface 加到 CaptureRequest.Builder 中。然后,我们创建了一个 CameraCaptureSession 来实现预览,并调用 setRepeatingRequest() 方法开始预览。
这是一个基本的相机预览设置的示例代码。你可以根据你的需求进行更多的高级设置,例如设置相机参数、拍照、录像等。