gpt4 book ai didi

css - 将 native 相机与条形码扫描仪掩码的透明 View react

转载 作者:技术小花猫 更新时间:2023-10-29 10:36:47 25 4
gpt4 key购买 nike

如何在 react-native-camera 上添加 mask ?

我正在使用 react-native-camera 为 React Native QRCode 扫描仪应用程序构建 UI。

相机顶部的覆盖 mask 应为浅灰色,但中间部分必须保持透明(透视)。

但是当我改变外层面具上的背景颜色时,它似乎也影响了中心部分。我的意思是,当然,它在它的 subview 后面。

下面的代码是快照的简化版本。

<Camera
ref={cam => {
this.camera = cam;
}}
onBarCodeRead={this._onBarCodeRead}
style={styles.cameraView}
aspect={Camera.constants.Aspect.fill}
playSoundOnCapture
>
<View
style={{
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
backgroundColor: 'rgba(0.2, 0.2, 0.2, 0.2)',
alignItems: 'center',
justifyContent: 'space-around',
}}
>
<View
style={{
width: 300,
height: 300,
backgroundColor: 'transparent',
borderColor: 'white',
borderWidth: 1,
}}
/>
</View>
</Camera>

The basic idea is here

知道如何完成这项工作吗?

最佳答案

我终于弄明白了。这个想法是像汉堡一样创建 3 行,然后在运行时计算高度和宽度。

中间一行有 3 个 View 组件,中间一个有透明背景和白色边框。

(值,300,来自中心 View (透明区域)的大小,我将它除以 10 来计算 flexboxes 的较小比率)

Barcode mask demo

export default class CameraScreen extends React.Component<any, any> {
render() {
const { height, width } = Dimensions.get('window');
const maskRowHeight = Math.round((AppStore.height - 300) / 20);
const maskColWidth = (width - 300) / 2;

return (
<View style={styles.container}>
<Camera
ref={cam => {
this.camera = cam;
}}
onBarCodeRead={this._onBarCodeRead}
style={styles.cameraView}
aspect={Camera.constants.Aspect.fill}
playSoundOnCapture
>
<View style={styles.maskOutter}>
<View style={[{ flex: maskRowHeight }, styles.maskRow, styles.maskFrame]} />
<View style={[{ flex: 30 }, styles.maskCenter]}>
<View style={[{ width: maskColWidth }, styles.maskFrame]} />
<View style={styles.maskInner} />
<View style={[{ width: maskColWidth }, styles.maskFrame]} />
</View>
<View style={[{ flex: maskRowHeight }, styles.maskRow, styles.maskFrame]} />
</View>
</Camera>
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
},
cameraView: {
flex: 1,
justifyContent: 'flex-start',
},
maskOutter: {
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
alignItems: 'center',
justifyContent: 'space-around',
},
maskInner: {
width: 300,
backgroundColor: 'transparent',
borderColor: 'white',
borderWidth: 1,
},
maskFrame: {
backgroundColor: 'rgba(1,1,1,0.6)',
},
maskRow: {
width: '100%',
},
maskCenter: { flexDirection: 'row' },
});

更新:不同品牌手机之间的高度比变化取决于它使用物理/软按钮。我用 flex 代替了固定高度。

关于css - 将 native 相机与条形码扫描仪掩码的透明 View react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48510350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com