[英]How to play a gif using ImageBackground in react-native?
[英]How to use ImageBackground to set background image for screen in react-native
当我在 react-native 中使用时,它会警告说不推荐使用与儿童一起使用,并且将来会出错。 取而代之的是用户。
所以,如果我使用它不会给出我正在使用的预期结果
这是我为使用而编写的代码
<ImageBackground source={require('../../img/splash/splash_bg.png')} style={styles.backgroundImage} >
</ImageBackground>
样式代码是
const styles = StyleSheet.create({
backgroundImage: {
flex: 1,
// width: undefined,
// height: undefined,
// flexDirection: 'column',
// backgroundColor:'transparent',
// justifyContent: 'flex-start',
},}
您可以在 React Native 上使用“ImageBackground”组件。
<ImageBackground
source={yourSourceFile}
style={{width: '100%', height: '100%'}}
>
<....yourContent...>
</ImageBackground>
我通过以下方式实现了这一目标:
import { ImageBackground } from 'react-native';
<ImageBackground style={ styles.imgBackground }
resizeMode='cover'
source={require('./Your/Path.png')}>
//place your now nested component JSX code here
</ImageBackground>
然后是样式:
imgBackground: {
width: '100%',
height: '100%',
flex: 1
},
两种选择:
#2 的代码:
render(){
return(
<View style={{ flex: 1 }}>
<Image style={{ width: screenWidth, height: screenHeight, position: 'absolute', top: 0, left: 0 }}/>
<Text>Hey look, image background</Text>
</View>
)
}
编辑:对于选项#2,您可以尝试resizeMode="stretch|cover"
编辑 2 :请记住,选项 #2 会按此顺序渲染图像,然后按此顺序渲染之后的所有内容,这意味着某些像素会渲染两次,这可能会对性能产生很小的影响(通常不会引起注意),但仅供参考
ImageBackground是一个非常简单且有用的组件。将您的组件作为嵌套组件放入ImageBackground
,并使用position
调整组件的position
。
这是一个例子。
<ImageBackground source={{ uri: hoge }} style={{ height: 100, width: 100, position: 'relative', top: 0, left: 0 }} > <Text style={{ fontWeight: 'bold', color: 'white', position: 'absolute', bottom: 0, left: 0 }} > Hello World </Text> </ImageBackground>
这是 RN 文档的链接: https : //facebook.github.io/react-native/docs/images
熟悉 Web 的开发人员提出的一个常见功能请求是 background-image。 为了处理这个用例,您可以使用
<ImageBackground>
组件,它与<Image>
具有相同的道具,并添加任何您想要在其上分层的子项。
在某些情况下,您可能不想使用<ImageBackground>
,因为实现非常简单。 请参阅<ImageBackground>
的源代码以获得更多信息,并在需要时创建您自己的自定义组件。
return (
<ImageBackground source={require('./image.png')} style={{width: '100%', height: '100%'}}>
<Text>Inside</Text>
</ImageBackground>
);
请注意,您必须指定一些宽度和高度样式属性。
另请注意,文件路径相对于组件所在的目录。
<ImageBackground
source={require("../assests/background_image.jpg")}
style={styles.container}
>
<View
style={{
flex: 1,
justifyContent: "center",
alignItems: "center"
}}
>
<Button
onPress={() => this.props.showImagePickerComponent(this.props.navigation)}
title="START"
color="#841584"
accessibilityLabel="Increase Count"
/>
</View>
</ImageBackground>
请使用此代码在 React Native 中设置背景图像
const img = '../../img/splash/splash_bg.png';
<ImageBackground source={{ uri: img }} style={styles.backgroundImage} >
</ImageBackground>
这对我有用。 可以在此处找到对 RN 文档的参考。我通过阅读这篇文章来写我的 - https://facebook.github.io/react-native/docs/images.html#background-image-via-nesting
添加背景图片,React Native 是基于组件的, ImageBackground组件需要两个 props style={{}}和source={require('')}
<ImageBackground source={require('./wallpaper.jpg')} style={{width: '100%', height: '100%'}}>
<....yourContent Goes here...>
</ImageBackground>
const { width, height } = Dimensions.get('window')
<View style={{marginBottom: 20}}>
<Image
style={{ height: 200, width: width, position: 'absolute', resizeMode: 'cover' }}
source={{ uri: 'https://picsum.photos/'+width+'/200/?random' }}
/>
<View style={styles.productBar}>
<View style={styles.productElement}>
<Image
style={{ height: 160, width: width - 250, position: 'relative', resizeMode: 'cover' }}
source={{ uri: 'https://picsum.photos/'+ 250 +'/160/?random' }}
/>
</View>
<View style={styles.productElement}>
<Text style={{ fontSize: 16, paddingLeft: 20 }}>Başlık</Text>
<Text style={{ fontSize: 12, paddingLeft: 20, color: "blue"}}>Alt Başlık</Text>
</View>
</View>
</View>
productBar: {
margin: 20,
marginBottom: 0,
justifyContent: "flex-start" ,
flexDirection: "row"
},
productElement: {
marginBottom: 0,
},
我想这会帮助你..
import React, { Component } from 'react';
import { homePageStyles } from '../styles/Style';
import { Text, ImageBackground } from 'react-native';
import HomePageWallpaper from '../images/homePageWallpaper.jpg';
export default class Home extends Component {
render() {
return (
<ImageBackground source={HomePageWallpaper} style={{ flex: 1, justifyContent: 'center', width: null, height: null }}>
<Container>
<Content>
<Text style={homePageStyles.description_text}>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</Text>
</Content>
</Container >
</ImageBackground>
);
}
}
我在背景图像及其子组件(包括徽标图像)方面遇到了同样的问题。 浪费了几个小时后,我找到了解决这个问题的正确方法。 这肯定对你有帮助。
var {View, Text, Image, ImageBackground} = require('react-native');
import Images from '@assets';
export default class Welcome extends Component {
render() {
return (
<ImageBackground source={Images.main_bg} style={styles.container}>
<View style={styles.markWrap}>
<Image source={Images.main_logo}
style={styles.mark} resizeMode="contain" />
</View>
<View style={[styles.wrapper]}>
{//Here put your other components}
</View>
</ImageBackground>
);
}
}
var styles = StyleSheet.create({
container:{
flex: 1,
},
markWrap: {
flex: 1,
marginTop: 83,
borderWidth:1, borderColor: "green"
},
mark: {
width: null,
height: null,
flex: 1,
},
wrapper:{
borderWidth:1, borderColor: "green",///for debug
flex: 1,
position:"relative",
},
}
(PS:我在此屏幕上放置了虚拟图像而不是真实的公司徽标。)
您必须先导入背景组件才能在代码上使用背景图像
我在 Google 上搜索了如何在 2021 年实现这一目标,因此我将继续添加我是如何实现这一目标的。 注意:我在我的项目中使用styled-components
。 另一个要提到的是,你可能并不需要额外的View
组件,但我现在用的是SafeAreaView
中的组件内部Background
组件添加适用于iOS的状态栏下面的附加间距。
import styled from 'styled-components';
const Background = styled.ImageBackground`
flex: 1;
resize-mode: cover; // Not sure if this helps, but it was used in the docs, listed below
justify-content: center;
`;
const Container = styled.SafeAreaView`
flex: 1;
`;
...
return (
<Background source={require('../assets/image.png')}>
<Container>
// rest of your components
</Container>
</Background>
)
...
<ImageBackground source=require('../../img/splash/splash_bg.png')} style={styles.backgroundImage} />
使用resizeMode: "contain"
调整背景图像的大小以确保图像完全可见,并resizeMode: "cover"
调整背景图像的大小以覆盖整个容器,即使它必须拉伸图像。
const styles = StyleSheet.create({
carImage: {
width: "100%",
height: "100%",
resizeMode: "cover"
}
})
.hero-image {
background-image: url("photographer.jpg"); /* The image used */
background-color: #cccccc; /* Used if the image is unavailable */
height: 500px; /* You must set a specified height */
background-position: center; /* Center the image */
background-repeat: no-repeat; /* Do not repeat the image */
background-size: cover; /* Resize the background image to cover the entire container */
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.