Android 当方向改变时,相机会滞后
我正在尝试使用Android 当方向改变时,相机会滞后,android,camera,surfaceview,Android,Camera,Surfaceview,我正在尝试使用SurfaceView创建一个相机预览,它基本上可以正常工作。我在onSurfaceCreated方法上初始化相机,并在onsurfacedestromed上销毁它。当设备的方向改变时,为什么要调用上述方法。以下是曲面视图代码 @Override public void surfaceCreated(SurfaceHolder holder) { // Initialize the camera initCamera(); Log.d("tags", "Ca
SurfaceView
创建一个相机预览,它基本上可以正常工作。我在onSurfaceCreated
方法上初始化相机,并在onsurfacedestromed
上销毁它。当设备的方向改变时,为什么要调用上述方法。以下是曲面视图代码
@Override
public void surfaceCreated(SurfaceHolder holder) {
// Initialize the camera
initCamera();
Log.d("tags", "Camera Started!");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.release();
}
Log.d("tags", "Camera destroyed!");
}
public void initCamera() {
if (camera == null) {
camera = Camera.open(); // Get's the first camera
}
try {
camera.setPreviewDisplay(sfHolder);
} catch (IOException err) {
err.printStackTrace();
}
// Set camera orientation
Activity activity = (Activity)this.getContext();
this.setCameraDisplayOrientation(activity);
camera.startPreview();
}
private void setCameraDisplayOrientation(Activity activity) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees + 360) % 360;
}
Log.d("tag", "Result -- " + result);
boolean camNull = camera == null;
Log.d("tag", String.valueOf(camNull));
camera.setDisplayOrientation(result);
当我在设备上启动应用程序时,预览将按预期启动,但当我将方向从纵向更改为横向,反之亦然时,预览将挂起几秒钟,新预览将以更改的方向显示
根据原木,当方向改变时,表面会被破坏并再次创建,因此每次方向改变时,相机都会被重新初始化。我怎样才能克服这个问题?我在这里做错了什么吗?克服这一问题的一种方法是将活动锁定在一种定向模式,而不是自己检测定向更改,只更改UI。我就是这样做的,但我不太喜欢。