React Native Camera сбрасывает зум при переключении типа - PullRequest
0 голосов
/ 07 мая 2018

Какую реализацию вы используете

RCTCamera

Шаги для воспроизведения

На Android, имейте представление RCTCamera с опцией увеличения, установленной для чтения из this.state.zoom, затем выполните

this.setState({
      zoom: [any level],
      type: [front type if current camera is back camera, back type if current camera is front camera],
    });

Ожидаемое поведение

Предполагается, что другая камера должна открываться с установленным масштабированием независимо от того, какая опора увеличения.

Фактическое поведение

Другая камера открывается без установленного увеличения.

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

В некоторых случаях выдается исключение, потому что setZoom() вызов пытается использовать камеру после того, как он был освобожден.

При попытке вызвать setZoom напрямую через React Native одновременно с настройкой состояния или в качестве параметра обратного вызова в setState, он генерирует исключение, поскольку ему не удалось подключиться к службе камеры. Прямой вызов setZoom через React Native, когда не переключаются типы камер, работает нормально.

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

05-02 15: 33: 30.482 1953-1953 / com.appname D / zoom: CameraView setZoom вызывается, настройка на 30 05-02 15: 33: 30.482 1953-1953 / com.appname D / zoom: RCTCamera setZoom вызывается, настройка cameraType от 1 до 30 05-02 15: 33: 30.672 345-11616 /? W / QCameraParameters: [PARM_DBG] zoom_level = 30 05-02 15: 33: 31.112 345-6416 /? W / QCameraParameters: [PARM_DBG] zoom_level = 0 05-02 15: 33: 35.572 1953-1953 / com.appname D / zoom: CameraView setZoom вызывается, настройка на 20 05-02 15: 33: 35.572 1953-1953 / com.appname D / zoom: RCTCamera setZoom вызывается, настройка cameraType 2 до 20 05-02 15: 33: 35.912 345-12088 /? W / QCameraParameters: [PARM_DBG] zoom_level = 20 05-02 15: 33: 36.312 345-31706 /? W / QCameraParameters: [PARM_DBG] zoom_level = 0

Окружающая среда

  • Node.js версия : 9,3
  • React Native version : 0.55.2
  • Платформа React Native + версия платформы : Android 6.0.1, API 23

реагировать-нативную-камеру

Версия : основная ветвь, но части RCTCamera являются модифицированной версией 0.12, так как RCTCamera сохраняет изображения намного быстрее, чем RNCamera, и имеет масштабирование пинч.

1 Ответ

0 голосов
/ 08 мая 2018

Решил это. Для тех, кто сталкивается с этой же или подобной очень специфической проблемой:

При переключении типов камер параметры камеры фактически устанавливаются дважды. Однажды как часть setZoom (), которая работает как задумано, и снова как часть AdjustPreviewLayout (), которая обнуляет параметр, установленный в setZoom ().

Поскольку обе эти функции находятся в RTCamera.java, я решил эту проблему, заставив setZoom () сохранить значение масштабирования в переменной (в дополнение к тому, что он уже делал), а затем с помощью AdjustPreviewLayout () установить параметр масштабирования. в соответствии с этой переменной.

...