我制作了一个使用surfaceView 来显示相机预览的应用程序。我在开发人员控制台中收到了许多报告,其中surfaceChanged 部分有错误:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Parameters parameters = mCamera.getParameters(); //// (Line 127)
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Camera.Size previewSize = previewSizes.get(4); //480h x 720w /// (Line 129)
parameters.setPreviewSize(previewSize.width, previewSize.height);
parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(parameters);
Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0)
{
parameters.setPreviewSize(height, width);
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90)
{
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180)
{
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270)
{
parameters.setPreviewSize(width, height);
mCamera.setDisplayOrientation(180);
}
mCamera.startPreview();
}
第一个错误:
java.lang.IndexOutOfBoundsException (Line 129)
第二个错误:
java.lang.NullPointerException (Line 127)
第三个错误:
java.lang.RuntimeException: set display orientation failed (when rotating cam 90*)
大多数错误报告来自三星 Galaxy 设备,但该应用程序在 LG nexus 4 上运行良好。有人可以提供更稳定可靠的表面更改方法以避免此类错误吗?