如题
用camera2+surfaceview预览画面拉长,怎么破。。。。
// 部分对象的声明
private Camera mCamera;
private SurfaceHolder mHolder;
mHolder = svContent.getHolder();
mHolder.addCallback(this);
// SurfaceHolder 的监听事件
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 相机预览
startPreview(mCamera, holder);
}
// 画布改变 调用 相机预览
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
startPreview(mCamera, holder);
}
// 画布销毁 回收相机
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
/**
* 预览相机
*/
private void startPreview(Camera camera, SurfaceHolder holder) {
try {
// 确认相机预览尺寸
setupCamera(camera);
camera.setPreviewDisplay(holder);
cameraInstance.setCameraDisplayOrientation(this, mCameraId, camera);
camera.startPreview();
isView = true;
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 设置surfaceView的尺寸 因为camera默认是横屏,所以取得支持尺寸也都是横屏的尺寸
* 我们在startPreview方法里面把它矫正了过来,但是这里我们设置设置surfaceView的尺寸的时候要注意 previewSize.height<previewSize.width
* previewSize.width才是surfaceView的高度
* 一般相机都是屏幕的宽度 这里设置为屏幕宽度 高度自适应 你也可以设置自己想要的大小
*/
private void setupCamera(Camera camera) {
Camera.Parameters parameters = camera.getParameters();
if (parameters.getSupportedFocusModes().contains(
Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
//根据屏幕尺寸获取最佳 大小
Camera.Size previewSize = cameraInstance.getPicPreviewSize(parameters.getSupportedPreviewSizes(),
screenHeight, screenWidth);
parameters.setPreviewSize(previewSize.width, previewSize.height);
Camera.Size pictrueSize = cameraInstance.getPicPreviewSize(parameters.getSupportedPictureSizes(),
screenHeight,screenWidth);
parameters.setPictureSize(pictrueSize.width, pictrueSize.height);
camera.setParameters(parameters);
// picHeight = (screenWidth * pictrueSize.width) / pictrueSize.height;
picWidth = pictrueSize.width;
picHeight = pictrueSize.height;
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(screenWidth,
(screenWidth * pictrueSize.width) / pictrueSize.height);
svContent.setLayoutParams(params);
}