React-Native:使用底部半径遮罩图像
React-Native: Mask image with a bottom radius
如何在图像中制作边框底部半径?
如何将图像遮盖到绿色区域?
我已经尝试了以下代码,但我无法获取上面分享的图像中的半径比
查看代码:
<View style={styles.wrapper}>
<View style={styles.welcomeWrapper}>
<View style={styles.welcomeImageWrapper}>
<Image style={{width:'100%'}} source={require('../assets/images/test-slide.jpg')}/>
</View>
</View>
<View style={{
height: 100,
backgroundColor: colors.white,
justifyContent: 'flex-end',
alignItems: 'center'
}}>
<Text style={{marginBottom:50,fontSize:18,fontFamily:'Montserrat-Regular'}}>Deneme Text </Text>
</View>
</View>
样式代码:
wrapper:{
flex:1,
display: 'flex',
backgroundColor:colors.white,
},
welcomeWrapper:{
flex:1,
justifyContent:'center',
backgroundColor:colors.green01,
overflow: 'hidden',
position:'relative',
width:'100%',
borderBottomRightRadius:Dimensions.get('window').width/100*50,
borderBottomLeftRadius:Dimensions.get('window').width/100*50,
},
看到你的图像蒙版的形状,我认为你应该使用类似 react-native-svg
的东西来创建一个真实的图像蒙版。
步骤:
将背景图片设置为View
和position: absolute
,这样你的图片就一直在背景中,可以被遮挡
将 react-native-svg
添加到您的项目中,例如使用 yarn add react-native-svg
,并使用 react-native link
link 库。最后,重新启动 metro bundler 并编译您的应用程序(run-android
或 run-ios
)。
设计svg遮罩(我用的是inkscape)并添加到容器的View
,遮罩应该和你的文本容器一样backgroundColor
.
使用 React 的 flexbox
布局进行一些样式设置,以便能够在每个设备上具有几乎相同的外观。在这个例子中,掩码取屏幕高度的 5/6
因为我的掩码 flex
数字是 5 而我的文本 flex
是 1
所以,这就是我最终得到的结果:
import * as React from 'react';
import { Dimensions, Image, StyleSheet, Text, View } from 'react-native';
import { Path, Svg } from 'react-native-svg';
const mask = {
width: Dimensions.get('window').width,
height: 50,
bgColor: '#ecf0f1',
};
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'flex-end',
},
image: {
position: 'absolute',
},
mask: {
flex: 5,
justifyContent: 'flex-end',
},
textContainer: {
flex: 1,
width: '100%',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: mask.bgColor,
},
text: {
fontSize: 50,
textAlign: 'center',
}
});
const App = () => (
<View style={styles.container}>
<Image style={styles.image} source={require('./assets/image.jpg')} />
<View style={styles.mask}>
<Svg width={mask.width} height={mask.height}>
<Path
fill={mask.bgColor}
d={`M 0 0 L 0 ${mask.height} L ${mask.width} ${mask.height} L ${mask.width} 0 A ${mask.width / 2} ${mask.height / 2} 0 0 1 ${mask.width / 2} ${mask.height / 2} A ${mask.width / 2} ${mask.height / 2} 0 0 1 0 0 z `} />
</Svg>
</View>
<View style={styles.textContainer}>
<Text style={styles.text}>Text</Text>
</View>
</View>
);
export default App;
这是 Android
模拟器中的结果
希望对您有所帮助!
Link 吃零食:https://snack.expo.io/BJlZgpuB7(但我的图片不会加载零食 :( )
如何在图像中制作边框底部半径?
如何将图像遮盖到绿色区域?
我已经尝试了以下代码,但我无法获取上面分享的图像中的半径比
查看代码:
<View style={styles.wrapper}>
<View style={styles.welcomeWrapper}>
<View style={styles.welcomeImageWrapper}>
<Image style={{width:'100%'}} source={require('../assets/images/test-slide.jpg')}/>
</View>
</View>
<View style={{
height: 100,
backgroundColor: colors.white,
justifyContent: 'flex-end',
alignItems: 'center'
}}>
<Text style={{marginBottom:50,fontSize:18,fontFamily:'Montserrat-Regular'}}>Deneme Text </Text>
</View>
</View>
样式代码:
wrapper:{
flex:1,
display: 'flex',
backgroundColor:colors.white,
},
welcomeWrapper:{
flex:1,
justifyContent:'center',
backgroundColor:colors.green01,
overflow: 'hidden',
position:'relative',
width:'100%',
borderBottomRightRadius:Dimensions.get('window').width/100*50,
borderBottomLeftRadius:Dimensions.get('window').width/100*50,
},
看到你的图像蒙版的形状,我认为你应该使用类似 react-native-svg
的东西来创建一个真实的图像蒙版。
步骤:
将背景图片设置为
View
和position: absolute
,这样你的图片就一直在背景中,可以被遮挡将
react-native-svg
添加到您的项目中,例如使用yarn add react-native-svg
,并使用react-native link
link 库。最后,重新启动 metro bundler 并编译您的应用程序(run-android
或run-ios
)。设计svg遮罩(我用的是inkscape)并添加到容器的
View
,遮罩应该和你的文本容器一样backgroundColor
.使用 React 的
flexbox
布局进行一些样式设置,以便能够在每个设备上具有几乎相同的外观。在这个例子中,掩码取屏幕高度的5/6
因为我的掩码flex
数字是 5 而我的文本flex
是 1
所以,这就是我最终得到的结果:
import * as React from 'react';
import { Dimensions, Image, StyleSheet, Text, View } from 'react-native';
import { Path, Svg } from 'react-native-svg';
const mask = {
width: Dimensions.get('window').width,
height: 50,
bgColor: '#ecf0f1',
};
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'flex-end',
},
image: {
position: 'absolute',
},
mask: {
flex: 5,
justifyContent: 'flex-end',
},
textContainer: {
flex: 1,
width: '100%',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: mask.bgColor,
},
text: {
fontSize: 50,
textAlign: 'center',
}
});
const App = () => (
<View style={styles.container}>
<Image style={styles.image} source={require('./assets/image.jpg')} />
<View style={styles.mask}>
<Svg width={mask.width} height={mask.height}>
<Path
fill={mask.bgColor}
d={`M 0 0 L 0 ${mask.height} L ${mask.width} ${mask.height} L ${mask.width} 0 A ${mask.width / 2} ${mask.height / 2} 0 0 1 ${mask.width / 2} ${mask.height / 2} A ${mask.width / 2} ${mask.height / 2} 0 0 1 0 0 z `} />
</Svg>
</View>
<View style={styles.textContainer}>
<Text style={styles.text}>Text</Text>
</View>
</View>
);
export default App;
这是 Android
模拟器中的结果
希望对您有所帮助!
Link 吃零食:https://snack.expo.io/BJlZgpuB7(但我的图片不会加载零食 :( )