本文檔介紹了RN中圖片展現方式,從幾個方面介紹css
適合新手食用。react
圖標不建議使用位圖,參考網上的實戰經驗,使用柵格圖片可能會:android
有兩個方案,使用svg和iconfont。ios
react-native自己不支持svg, react-native-svg
是社區提供的解決方案。使用也很直觀,語法上能夠看成一個組件來使用。git
安裝見githubgithub
庫自己提供基本的圖案,如矩形,點……segmentfault
若要使用自定義svg圖案,有兩種方式react-native
https://github.com/smooth-cod...緩存
import SvgCookie from '../assets/imgs/svg/Cookie' <SvgCookie width={100} height={240} />
須要配置metro.config.js
文件,見 react-native-svg-transformer
此方案更簡單,能夠直接使用svg文件。網絡
import BalloonSVG from '../assets/imgs/svgSrc/hot-air-balloon.svg' <BalloonSVG width={100} height={240} />
這是被react-native-svg推薦的方式,目前(我的)不清楚metro文件的做用機制,須要考慮可維護性。
iconfont也是使用圖標的一種經常使用方式,使用起來最簡單
<Icon name={'home'} size={26} color="red"/>
然而不支持多色。
庫內置iconfont可以使用,項目自定義圖標須要經過命令行把css和ttf文件生成組件文件。
iconfont和svg並不衝突,看項目須要,也可並存。
width
和height
屬性可設置圖片大小,
resizeMode決定當組件尺寸和圖片尺寸不成比例的時候如何調整圖片的大小。
父元素使用flex佈局,圖片子元素設置百分比,同時設置resizeMode 調整比例。
根據圖片高寬和設備高寬的比例來調整。
如但願圖片佔據屏幕寬80%,
比率 = 設備寬 / 圖片寬 縮放後圖片寬 = 設備寬 * 0.8 縮放後圖片高 = 圖片高 * 比率 * 0.8
react-native-fast-image
庫可更好地處理緩存,而且提供了preload,指定優先級的功能。
可以使用RN中ImageBackground
組件,把須要背景圖的子組件嵌入其中便可,它有着和Image
組件同樣的props。
源碼很簡單,有特殊需求,也可本身實現。
原生提供下面幾種方式展現圖片:
<Image source={require('./my-icon.png')} />
圖片文件的查找會和JS模塊的查找方式同樣。 若是你有`my-icon.ios.png`和`my-icon.android.png`,Packager就會根據平臺而選擇不一樣的文件。
如項目文件結構和代碼以下
├── index.js └── img ├── my-icon@2x.png └── my-icon@3x.png <Image source={require('./assets/imgs/check.png')} />
Packager會打包全部的圖片而且依據屏幕精度提供對應的資源。
若是你在編寫一個混合App(一部分UI使用React Native,而另外一部分使用平臺原生代碼),也可使用已經打包到App中的圖片資源。
注意此時只使用文件名,不帶路徑也不帶後綴:
<Image source={{uri: 'app_icon'}} style={{width: 40, height: 40}} />
對於放置在Android的assets目錄中的圖片,還可使用asset:/ 前綴來引用:
<Image source={{uri: 'asset:/app_icon.png'}} style={{width: 40, height: 40}} />
網絡圖片須要手動指定圖片的尺寸,不然沒法顯示。
最好使用https,不然須要手動配置。
<Image source={{uri: 'https://facebook.github.io/react/img/logo_og.png'}} style={{width: 400, height: 400}} />
有時候你可能拿到的是圖片的 base64 數據,此時可使用'data:'格式來顯示圖片。須要手動指定圖片的尺寸。
可從相冊獲取圖片資源展現。