I can show you ways to reset the preview size:
You must change the preview settings on the Camera.
private void setImageSize() { Camera.Size size = CameraUtil.findClosetImageSize(mRxCamera.getNativeCamera(), PREFER_SIZE); mCamera.getNativeCamera().getParameters().setPictureSize(size.width, size.height); WIDTH = size.width; HEIGHT = size.height; }
and after you need to resize the layout
private void resetPreviewSize() { final boolean widthIsMax = mWidth > mHeight; final Camera.Size size = mCamera.getNativeCamera().getParameters().getPreviewSize(); final RectF rectDisplay = new RectF(); final RectF rectPreview = new RectF(); rectDisplay.set(0, 0, mWidth, mHeight); final int width = widthIsMax ? size.width : size.height; final int height = widthIsMax ? size.height : size.width; rectPreview.set(0, 0, width, height); final Matrix matrix = new Matrix(); matrix.setRectToRect(rectDisplay, rectPreview, Matrix.ScaleToFit.START); matrix.invert(matrix); matrix.mapRect(rectPreview); mCameraView.getLayoutParams().height = (int) (rectPreview.bottom); mCameraView.getLayoutParams().width = (int) (rectPreview.right); mCameraView.requestLayout(); }
and if you need
public static Camera.Size findClosetImageSize(Camera camera, Point preferSize) { int preferX = preferSize.x; int preferY = preferSize.y; Camera.Parameters parameters = camera.getParameters(); List<Camera.Size> allSupportSizes = parameters.getSupportedPictureSizes(); Log.d(TAG, "all support Image size: " + dumpPreviewSizeList(allSupportSizes)); int minDiff = Integer.MAX_VALUE; int index = 0; for (int i = 0; i < allSupportSizes.size(); i++) { Camera.Size size = allSupportSizes.get(i); int x = size.width; int y = size.height; int diff = Math.abs(x - preferX) + Math.abs(y - preferY); if (diff < minDiff) { minDiff = diff; index = i; } } return allSupportSizes.get(index); }
source share