[英]Camera2BasicFragment - problems modifying to switch front/back cameras
我正在尝试修改Camera2BasicFragment示例项目以支持前后摄像头之间的切换。 我在预览屏幕上添加了一个切换按钮覆盖,以及以下代码来处理点击。 还有一个类变量cameraDirection
来记住当前正在使用的摄像头:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_take_photo:
takePicture();
break;
case R.id.button_reverse_camera:
CameraManager manager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
try {
String[] cameraIds = manager.getCameraIdList();
CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(mCameraId);
for (String id : cameraIds) {
if (! id.equals(mCameraId)) {
closeCamera();
cameraDirection = cameraDirection == CameraCharacteristics.LENS_FACING_FRONT?CameraCharacteristics.LENS_FACING_BACK:
CameraCharacteristics.LENS_FACING_FRONT;
mCameraId = id;
openCamera(mPreviewSize.getWidth(), mPreviewSize.getHeight());
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
break;
}
}
令人讨厌的是,相机的第一个开关工作正常。 但后续的开关不起作用。 发生的事情是,预览稍微消失,就像正在发生的事情一样,但它仍保留在当前选定的摄像机上。 再点击一下切换按钮后,应用程序崩溃,更令人讨厌的是没有堆栈跟踪。 所以我不知道问题是什么。 我怀疑相机锁没有正确释放,但这只是猜测。
所以我希望有人成功修改了这个样本来处理摄像头切换,或者可以推荐一个替代的Camera2片段实现。
问题出在setUpCameraOutputs(int width, int height)
,它设置mCameraId=cameraId;
,因为它在评论中说
//我们在此示例中不使用前置摄像头。
我试过了
if(mCameraId==null){
mCameraId=cameraId;
}
但这还不够,因为它没有为我设置正确的预览尺寸。
您可以将方法修改为setUpCameraOutputs(int width, int height, String cameraId)
并正确进行设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.