android - 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
环境
- Node.js 版本:9.3
- 反应本机版本:0.55.2
- React Native 平台+平台版本:Android 6.0.1,API 23
反应原生相机
版本:Master 分支,但 RCTCamera 部分是 0.12 的修改版本,因为 RCTCamera 保存图片的速度比 RNCamera 快得多,并且具有缩放缩放功能。
解决方案
解决了。对于遇到相同或类似的非常具体问题的任何人:
切换相机类型时,相机参数实际上设置了两次。一次作为 setZoom() 的一部分,按预期工作,再次作为 adjustPreviewLayout() 的一部分,将 setZoom() 中的参数集清零。
由于这两个函数都在 RTCamera.java 中,我通过让 setZoom() 将缩放值存储在一个变量中(除了它已经在做的事情之外)来解决这个问题,然后让 adjustPreviewLayout() 根据那个设置缩放参数多变的。
推荐阅读
- codenameone - Codenameone - 单击按钮时 Android 上的空指针异常
- irc - UnrealIRCd or InspIRCd
- c++ - Is aliasing an array of T to an array of std::complex
legal? - git - cannot git push due to unrelated upstream file changes
- firebase - _firebaseAuth.updateProfile missing after firebase_auth plugin upgrade to 0.6.2+1
- c# - Azure functions: Move to poison blob without retry if a particular exception is thrown
- android - 如何在辅助/外部屏幕上运行 qt android 应用程序
- php - Laravel - 带有值标签的测试编辑表单
- python - 在已经存在的嵌入中添加用户的消息输入
- c# - 无法让运算符使用小数和双精度,但我需要它。有什么方法可以在不重做我的整个代码的情况下解决这个问题?