Я пытался понять это на некоторое время, но по какой-то причине, когда я начинаю записывать видео с камерой, предварительный просмотр приближается. У меня есть следующий код из некоторых примеров:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters myParameters = mCamera.getParameters();
List<Camera.Size> sizes = myParameters.getSupportedPreviewSizes();
Camera.Size myBestSize = getBestPreviewSize(sizes, width, height);
if (myBestSize != null) {
myParameters.setPreviewSize(myBestSize.width, myBestSize.height);
myParameters.setVideoStabilization(false);
mCamera.setParameters(myParameters);
mCamera.startPreview();
mCamera.unlock();
}
}
private Camera.Size getBestPreviewSize(List<Camera.Size> sizes, int width, int height) {
final double ASPECT_TOLERANCE = 0.05;
double targetRatio = (double) width / height;
if (sizes == null) return null;
Camera.Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = height;
// Find size
for (Camera.Size size : sizes) {
double ratio = (double) size.width / size.height;
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
Но предварительный просмотр по-прежнему масштабируется при записи видео. Я попытался вручную установить размер предварительного просмотра на 1280x720, однако он не работает на всех проверенных мной устройствах, некоторые из них показывают черный SurfaceView.
Есть ли способ предотвратить просмотр предварительного просмотра при записи видео? Ни одно из решений здесь в StackOverflow не работает.
EDIT: Я попытался создать пользовательский SurfaceView со своим собственным методом onMesaure, но теперь я получаю ошибку -19, когда я запускаю свой MediaRecorder. (не обращайте внимания на -16 в награду)