学习本系列内容须要具有必定 HTML 开发基础,没有基础的朋友能够先转至 HTML快速入门(一) 学习html
本人接触 React Native 时间并非特别长,因此对其中的内容和性质了解可能会有所误差,在学习中若是有错会及时修改内容,也欢迎万能的朋友们批评指出,谢谢react
文章初版出自简书,若是出现图片或页面显示问题,烦请转至 简书 查看 也但愿喜欢的朋友能够点赞,谢谢android
{nativeEvent: {layout: {x, y, width, height}}}
url地址
或者 一个本地路径
在介绍几种加载图片资源的方式以前,先肯定一下图片的样式,以下react-native
imgStyle: { width:100, height:100, }
从当前RN项目中加载图片资源,和 html 同样,咱们须要将图片放到 RN 项目中,这边我建立了个 img 文件夹,里面包含了须要使用到的图片资源网络
{/* 不设置尺寸的状况下 */} <Image source={require('./img/icon.jpg')}></Image>
效果:
app
{/* 设置尺寸的状况下 */} <Image source={require('./img/icon.jpg')} style={styles.imgStyle}></Image>
效果:
布局
以iOS为例,咱们根据原生的开发习惯把图片放到 images.xcassets 中,这样在编译连接完成后,会将里面的图片统一打包以供使用学习
若是是Android的话,须要打开目录 android/app/src/res/ ,将图片按照安卓原生开发习惯将不一样大小的图片方便放进四个文件夹内flex
完成了图片的导入,最好从新运行模拟器,以确保图片已经正确打包,而后就是使用图片的时候了
动画
{/* 和上面同样,若是不预先设置尺寸的话,依旧是根据图片资源本来的大小进行展现 */} {/* 路径书写格式中 image! 是固定写法,后面直接加上图片的名字便可,不可加 .后缀名 */} <Image source={require('image!lufei')}></Image>
效果:
注意:大括号内的是 uri 不是 url
){/* uri是固定写法,后面跟上图片网络URL地址的字符串便可,还有,网络图片必须设置图片的大小,不然没法显示,通常还须要配合填充方式以达到想要的效果 */} <Image source={{uri:'https://img.alicdn.com/tps/TB1OvT9NVXXXXXdaFXXXXXXXXXX-520-280.jpg'}} style={styles.imgStyle}></Image>
效果:
resizeMode属性
,它包含了3个可选参数,下面就以加载网络图片为例先加载网络图片,并设置样式
// 导入Dimensions库 var Dimensions = require('Dimensions'); // 入口 export default class TestRN extends Component { render() { return ( <View style={styles.container}> <Image source={{uri:'https://img.alicdn.com/tps/TB1OvT9NVXXXXXdaFXXXXXXXXXX-520-280.jpg'}} style={styles.imgStyle}></Image> </View> ); } } // 样式 const styles = StyleSheet.create({ container: { backgroundColor:'blue', flex:1, }, imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150 } });
效果:
默认
):图片居中显示且不拉伸图片,超出的部分剪裁掉imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150, // 设置图片填充模式 resizeMode:'cover' }
效果:
imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150, // 设置图片填充模式 resizeMode:'contain' }
效果:
imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150, // 设置图片填充模式 resizeMode:'stretch' }
效果:
// 样式 const styles = StyleSheet.create({ container: { backgroundColor:'blue', flex:1, // 设置主轴对齐方式 justifyContent:'center', // 设置侧轴对齐方式 alignItems:'center' }, imgStyle: { backgroundColor:'green', width:Dimensions.get('window').width, height:200, // 设置图片填充模式 resizeMode:'stretch' } });
效果:
<Image source={{uri:'https://img.alicdn.com/tps/TB1OvT9NVXXXXXdaFXXXXXXXXXX-520-280.jpg'}} style={styles.imgStyle}> <Text style={{marginTop:100}}>这是一张来自淘宝的图片</Text> </Image>
效果:
如今咱们就结合前面的一下教程,用最通俗的方式作一个简单的QQ消息模块界面
import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, Image } from 'react-native'; // 导入Dimensions库 var Dimensions = require('Dimensions'); // 入口 export default class TestRN extends Component { render() { return ( <View style={styles.container}> {/* 由于还没讲到listView,这边就用View表明Cell*/} <View style={styles.cellStyle}> {/* 头像 */} <Image source={require('./img/lufei.jpg')} style={styles.imgStyle}></Image> {/* 昵称 */} <Text style={styles.nameStyle}>昵称</Text> </View> {/* 分隔线 */} <View style={styles.lineStyle}></View> <View style={styles.cellStyle}> {/* 头像 */} <Image source={require('./img/lufei.jpg')} style={styles.imgStyle}></Image> {/* 昵称 */} <Text style={styles.nameStyle}>昵称</Text> </View> {/* 分隔线 */} <View style={styles.lineStyle}></View> <View style={styles.cellStyle}> {/* 头像 */} <Image source={require('./img/lufei.jpg')} style={styles.imgStyle}></Image> {/* 昵称 */} <Text style={styles.nameStyle}>昵称</Text> </View> {/* 分隔线 */} <View style={styles.lineStyle}></View> </View> ); } } // 样式 const styles = StyleSheet.create({ container: { backgroundColor:'white', flex:1, // 设置换行方式 flexWrap:'wrap' }, cellStyle: { // 尺寸 height:44, width:Dimensions.get('window').width, // 设置背景颜色 backgroundColor:'white', // 设置主轴方向 flexDirection:'row', // 设置侧轴对齐方式 alignItems:'center' }, imgStyle: { width:30, height:30, // 设置图片填充模式 resizeMode:'cover', // 设置圆角 borderRadius:15, // 设置图片位置 marginLeft:10 }, nameStyle: { // 设置昵称位置 marginLeft:10 }, lineStyle: { // 背景色 backgroundColor:'black', // 设置尺寸 width:Dimensions.get('window').width, height:1 } }); AppRegistry.registerComponent('TestRN', () => TestRN);
{nativeEvent: {layout: {x, y, width, height}}}
url地址
或者 一个本地路径
在介绍几种加载图片资源的方式以前,先肯定一下图片的样式,以下
imgStyle: { width:100, height:100, }
从当前RN项目中加载图片资源,和 html 同样,咱们须要将图片放到 RN 项目中,这边我建立了个 img 文件夹,里面包含了须要使用到的图片资源
{/* 不设置尺寸的状况下 */} <Image source={require('./img/icon.jpg')}></Image>
效果:
{/* 设置尺寸的状况下 */} <Image source={require('./img/icon.jpg')} style={styles.imgStyle}></Image>
效果:
以iOS为例,咱们根据原生的开发习惯把图片放到 images.xcassets 中,这样在编译连接完成后,会将里面的图片统一打包以供使用
若是是Android的话,须要打开目录 android/app/src/res/ ,将图片按照安卓原生开发习惯将不一样大小的图片方便放进四个文件夹内
完成了图片的导入,最好从新运行模拟器,以确保图片已经正确打包,而后就是使用图片的时候了
{/* 和上面同样,若是不预先设置尺寸的话,依旧是根据图片资源本来的大小进行展现 */} {/* 路径书写格式中 image! 是固定写法,后面直接加上图片的名字便可,不可加 .后缀名 */} <Image source={require('image!lufei')}></Image>
效果:
注意:大括号内的是 uri 不是 url
){/* uri是固定写法,后面跟上图片网络URL地址的字符串便可,还有,网络图片必须设置图片的大小,不然没法显示,通常还须要配合填充方式以达到想要的效果 */} <Image source={{uri:'https://img.alicdn.com/tps/TB1OvT9NVXXXXXdaFXXXXXXXXXX-520-280.jpg'}} style={styles.imgStyle}></Image>
效果:
resizeMode属性
,它包含了3个可选参数,下面就以加载网络图片为例先加载网络图片,并设置样式
// 导入Dimensions库 var Dimensions = require('Dimensions'); // 入口 export default class TestRN extends Component { render() { return ( <View style={styles.container}> <Image source={{uri:'https://img.alicdn.com/tps/TB1OvT9NVXXXXXdaFXXXXXXXXXX-520-280.jpg'}} style={styles.imgStyle}></Image> </View> ); } } // 样式 const styles = StyleSheet.create({ container: { backgroundColor:'blue', flex:1, }, imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150 } });
效果:
默认
):图片居中显示且不拉伸图片,超出的部分剪裁掉imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150, // 设置图片填充模式 resizeMode:'cover' }
效果:
imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150, // 设置图片填充模式 resizeMode:'contain' }
效果:
imgStyle: { // 设置背景颜色 backgroundColor:'green', // 设置宽度 width:Dimensions.get('window').width, // 设置高度 height:150, // 设置图片填充模式 resizeMode:'stretch' }
效果:
// 样式 const styles = StyleSheet.create({ container: { backgroundColor:'blue', flex:1, // 设置主轴对齐方式 justifyContent:'center', // 设置侧轴对齐方式 alignItems:'center' }, imgStyle: { backgroundColor:'green', width:Dimensions.get('window').width, height:200, // 设置图片填充模式 resizeMode:'stretch' } });
效果:
<Image source={{uri:'https://img.alicdn.com/tps/TB1OvT9NVXXXXXdaFXXXXXXXXXX-520-280.jpg'}} style={styles.imgStyle}> <Text style={{marginTop:100}}>这是一张来自淘宝的图片</Text> </Image>
效果:
如今咱们就结合前面的一下教程,用最通俗的方式作一个简单的QQ消息模块界面单元格
import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, Image } from 'react-native'; // 导入Dimensions库 var Dimensions = require('Dimensions'); // 入口 export default class TestRN extends Component { render() { return ( <View style={styles.container}> {/* 由于还没讲到listView,这边就用View表明Cell*/} <View style={styles.cellStyle}> {/* 头像 */} <Image source={require('./img/lufei.jpg')} style={styles.imgStyle}></Image> {/* 昵称 */} <Text style={styles.nameStyle}>昵称</Text> </View> {/* 分隔线 */} <View style={styles.lineStyle}></View> <View style={styles.cellStyle}> {/* 头像 */} <Image source={require('./img/lufei.jpg')} style={styles.imgStyle}></Image> {/* 昵称 */} <Text style={styles.nameStyle}>昵称</Text> </View> {/* 分隔线 */} <View style={styles.lineStyle}></View> <View style={styles.cellStyle}> {/* 头像 */} <Image source={require('./img/lufei.jpg')} style={styles.imgStyle}></Image> {/* 昵称 */} <Text style={styles.nameStyle}>昵称</Text> </View> {/* 分隔线 */} <View style={styles.lineStyle}></View> </View> ); } } // 样式 const styles = StyleSheet.create({ container: { backgroundColor:'white', flex:1, // 设置换行方式 flexWrap:'wrap' }, cellStyle: { // 尺寸 height:44, width:Dimensions.get('window').width, // 设置背景颜色 backgroundColor:'white', // 设置主轴方向 flexDirection:'row', // 设置侧轴对齐方式 alignItems:'center' }, imgStyle: { width:30, height:30, // 设置图片填充模式 resizeMode:'cover', // 设置圆角 borderRadius:15, // 设置图片位置 marginLeft:10 }, nameStyle: { // 设置昵称位置 marginLeft:10 }, lineStyle: { // 背景色 backgroundColor:'black', // 设置尺寸 width:Dimensions.get('window').width, height:1 } }); AppRegistry.registerComponent('TestRN', () => TestRN);
效果: