Intereting Posts
«К сожалению, Launcher остановился» на эмуляторе Android Nexus 6 Как избавиться от предупреждения Android Studio «Результат getException () не выбрасывается»? Как установить тег в MenuItem? Android Studio 0.3.1, appcompat-v7 и проект библиотеки Android всегда генерируют IllegalStateException Обновить анимацию элемента меню в ActionBarSherlock Как получить значение RGB из шестнадцатеричного кода цвета в java Сбой при сбое токенов Android Google Cloud Messaging (GCM) после обновления, связанного с Firebase для Google Play Services Подпись tagConfigs дает мне ошибку Lint в build.gradle после обновления до версии v22 Модернизация с помощью Rxjava Schedulers.newThread () vs Schedulers.io () Как показать тень вокруг linearlayout в Android? Создайте AAR, который зависит от множества AAR Как «сдуть» ViewStub? Ошибка MediaRecorder при остановке записи Являются ли onCreate и onRestoreInstanceState взаимоисключающими? Могу ли я заставить кнопку «Назад назад» вернуться на два этапа в стек активности?

Камера для Android – просмотр изображений при записи видео

Я пытался понять это на некоторое время, но по какой-то причине, когда я начинаю записывать видео с камерой, предварительный просмотр приближается. У меня есть следующий код из некоторых примеров:

@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; } 

Но предварительный просмотр по-прежнему масштабируется при записи видео. Я попытался вручную установить размер предварительного просмотра на 1280×720, однако он не работает на всех проверенных мной устройствах, некоторые из них показывают черный SurfaceView.

Есть ли способ предотвратить просмотр предварительного просмотра при записи видео? Ни одно из решений здесь, в StackOverflow, похоже, не работает.

EDIT: Я попытался создать пользовательский SurfaceView со своим собственным методом onMesaure, но теперь я получаю ошибку -19 при запуске MediaRecorder. (Не обращайте внимания на -16 в щедрости)

Solutions Collecting From Web of "Камера для Android – просмотр изображений при записи видео"

Я смущен тем видом масштабирования, о котором вы говорите, может быть программным увеличением или автофокусом, возможно, поэтому я предлагаю различные потенциальные советы, ведущие к окончательному решению:

  1. Реализовать mCamera.setZoomChangeListener, например:

     mCamera.setZoomChangeListener(new Camera.OnZoomChangeListener() { @Override public void onZoomChange(int i, boolean b, Camera camera) { Log.e("StackOverflow","Zoom just changed !"); // Inspect things from here } }); 
  2. Отключите плавное масштабирование:

     mCamera.stopSmoothZoom(); // My device doesn't support it, but maybe your device does 
  3. Осмотрите все свои камеры. Параметры:

     Log.e("StackOverflow", "All Camera parameters :"); for(String s : mCamera.getParameters().flatten().split(";")) Log.e("StackOverflow", s + "\n"); 
  4. Затем переключите все, что может быть связано с увеличением, например:

     Camera.Parameters parameters = mCamera.getParameters(); parameters.setZoom(100); // My device support some values in the range 100 | 400 parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); parameters.setVideoStabilization(false); // Don't forget to add the new parameters to the camera : mCamera.setParameters(parameters); 

С уважением