首页 > 解决方案 > React Native Camera 在切换类型时重置缩放

问题描述

您正在使用哪种实现

RCT相机

重现步骤

在 Android 上,有一个 RCTCamera 视图,其 zoom 属性设置为从 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

环境

反应原生相机

版本:Master 分支,但 RCTCamera 部分是 0.12 的修改版本,因为 RCTCamera 保存图片的速度比 RNCamera 快得多,并且具有缩放缩放功能。

标签: androidreact-nativereact-native-camera

解决方案


解决了。对于遇到相同或类似的非常具体问题的任何人:

切换相机类型时,相机参数实际上设置了两次。一次作为 setZoom() 的一部分,按预期工作,再次作为 adjustPreviewLayout() 的一部分,将 setZoom() 中的参数集清零。

由于这两个函数都在 RTCamera.java 中,我通过让 setZoom() 将缩放值存储在一个变量中(除了它已经在做的事情之外)来解决这个问题,然后让 adjustPreviewLayout() 根据那个设置缩放参数多变的。


推荐阅读