React Native学习之 Image组件

静态图片资源

React Native提供了一个统一的方式来管理iOS和Android应用中的图片。要往APP中添加一个静态图片,只需把图片文件放在代码文件夹中某处,然后像下面这样去引用它:

<Image source={require('./my-icon.png')} />

注意:一些老文章和教程提到的require('image!xxx')的写法已经从0.40版本开始不再支持!

为了使新的图片资源机制正常工作,require中的图片名字必须是一个静态字符创(不能使用变量!因为require是在编译时期执行,而非运行时期执行!)

//错误
var icon = this.props.active ? 'my-icon-active' : 'my-icon-inactive';
<Image source={require('./' + icon + '.png')} />

//正确
var icon = this.props.active ? require('./my-icon-active.png') : require('my-icon-inactive.png');
<Image source={icon} />

注意:通过上述这种方式引用的图片资源包含图片的尺寸(宽高)信息,如果你需要动态缩放图片(例如,通过flex),你可能必须手动在style属性设置{width:null,height:null}

使用混合App的图片资源

如果你在编写一个混合App(一部分UI使用React Native,而另一部分使用平台原生代码),也可以使用已经打包到App中的图片资源(以拖拽的方式放置在Xcode的asset类目中,或者放置在Android的drawable目录里)。注意此时只使用文件名,不带路径也不带后缀:

<Image source={{uri:'app_icon'}} style={{width:40,height:40}} />

对于放置在Android的assets目录中的图片,还可以使用assets:/前缀来引用:

<Image source={{uri:'assets:/app_icon.png'}} style={{width:40,height:40}}/>

注意:这些做法并没有做任何安全检查,需要自己确保图片在应用中确实存在,而且还需要指定尺寸

加载网络图片

我们需要给定图片的宽高或者知道图片的宽高比才能展示图片。

//正确
<Image source={{uri:'https://facebook.github.io/react/logo-og.png'}} style={{width:400,height:400}}/>

//错误
<Image source={{uri:'https://facebook.github.io/react/logo-og.png'}}/>

Uri数据图片

如果拿到的是图片的base64数据,此时可以使用 'data:' 格式来显示图片,需要手动指定图片的尺寸

建议仅对非常小的图片使用base64数据,比如一些小图标

//请记得指定宽高
<Image
    style={{
        width:50,
        height:50,
        resizeMode:'contain',
    }}
    source={{uri:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAAEXRFWHRTb2Z0d2FyZQBwbmdjcnVzaEB1SfMAAABQSURBVGje7dSxCQBACARB+2/ab8BEeQNhFi6WSYzYLYudDQYGBgYGBgYGBgYGBgYGBgZmcvDqYGBgmhivGQYGBgYGBgYGBgYGBgYGBgbmQw+P/eMrC5UTVAAAAABJRU5ErkJggg=='}}
/>

在Android上支持GIF和WebP格式图片

默认情况下Android是不支持GIF和WebP格式的,需要在 android/app/build.gradle 文件中手动添加以下模块:

dependencies {
  // 如果你需要支持Android4.0(API level 14)之前的版本
  compile 'com.facebook.fresco:animated-base-support:1.10.0'

  // 如果你需要支持GIF动图
  compile 'com.facebook.fresco:animated-gif:1.10.0'

  // 如果你需要支持WebP格式,包括WebP动图
  compile 'com.facebook.fresco:animated-webp:1.10.0'
  compile 'com.facebook.fresco:webpsupport:1.10.0'

  // 如果只需要支持WebP格式而不需要动图
  compile 'com.facebook.fresco:webpsupport:1.10.0'
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值