React Native基礎(chǔ)之Image

React Native基礎(chǔ)之Image

Image組件

? ? ? ?在React Native中晤碘,Image組件是用來加載圖片的組件携冤,如果學(xué)習(xí)過android的話盒刚,應(yīng)該知道Image組件的作用就相當(dāng)于android中的ImageView控件细诸,用于顯示圖片惕它。

Image加載圖片等幾種方式

? ? ? ?作為RN中加載圖片的組件怕午,不同于android中的ImageView,android中的ImageView僅用來加載android項(xiàng)目中的drawable和mipmap目錄下的圖片資源淹魄。

? ? ? ?RN項(xiàng)目本就是縮小了android與ios的差別诗轻,囊括了原生的android項(xiàng)目和ios項(xiàng)目,自然也就包含了原生項(xiàng)目中的圖片資源目錄揭北,再加上RN項(xiàng)目中需要公共資源目錄扳炬,因此,在React Native中搔体,Image加載圖片的方式出現(xiàn)了好幾種恨樟,如下:

  • 加載RN項(xiàng)目中靜態(tài)圖片
  • 加載原生圖片(android:drawable/mipmap ios:Images.xcassets目錄下)
  • 加載網(wǎng)絡(luò)圖片

加載RN項(xiàng)目中的靜態(tài)圖片

<Image source={require('../img/icon_logo.png')} style={{marginTop:20}}/>

? ? ?
?加載方式為:

require('圖片存放路徑')

? ? ? ?此種方式用于加載RN項(xiàng)目中的靜態(tài)圖片(require中放的是RN項(xiàng)目中的圖片路徑)

? ? ? ?使用此方式加載靜態(tài)圖片時(shí),圖片的位置(在RN項(xiàng)目中疚俱,不能在android劝术、ios、node-modules目錄下)使用這一種加載圖片的方式

? ? ?
?注意:

  • require函數(shù)中填寫圖片路徑時(shí),需要加上圖片的后綴名养晋,如上:'.png'
  • require函數(shù)中暫時(shí)不支持字符串拼接衬吆,如:require('../img/'+'icon_log.png''),如此會(huì)報(bào)異常
  • require路徑的前面常有:'../'、'./'這樣的绳泉,'./'表示當(dāng)前目錄逊抡,'../'表示當(dāng)前目錄的上級(jí)(父)目錄
  • RN還有一個(gè)優(yōu)勢(shì),RN中可以通過圖片的命名方式來實(shí)現(xiàn)對(duì)應(yīng)平臺(tái)圖片的加載零酪,命名方式為:'圖片名'+'.平臺(tái)名'+'.后綴名',如:圖片icon_logo.android.pngicon_logo.ios.png,RN會(huì)根據(jù)中間的平臺(tái)名來加載對(duì)應(yīng)平臺(tái)的圖片
  • RN實(shí)現(xiàn)圖片適配的方式:
    • 圖片命名為icon_logo@2x.png冒嫡、icon_logo@3x.png的形式,RN會(huì)根據(jù)屏幕分辨率來加載對(duì)應(yīng)尺寸的圖片四苇,如果沒有恰好滿足屏幕分辨率的孝凌,則選擇最接近的
    • 該種適配方式,對(duì)與android來說月腋,引入的時(shí)候不能將'@2x'這樣的字樣引入進(jìn)來蟀架,如require('./img/icon_logo@2x.png'),會(huì)導(dǎo)致圖片無法識(shí)別榆骚,正確的加載方式為require('./img/icon_logo.png')

加載原生圖片

<Image source={{uri:'icon_app'}} style = {styles.icon}></Image>

const styles = StyleSheet.create({
    container:{
        flexDirection:'column',
        justifyContent:'center',
        alignItems:'center',
    },
    icon:{
        width:120,
        height:120,
    },
    text:{
        color:'black',
        fontSize:16,
        marginTop:20
    }
})

? ? ?
?所謂原生圖片片拍,android中指的是app/src/main/res/drawable目錄下,ios中指的是Images.xcassets目錄寨躁,或者說是打包后的apk后反編譯出來的圖片資源

? ? ?
?從以上代碼可以看到,我們可以看到牙勘,加載方式為:

{uri:'圖片名稱'}

這里的圖片名稱不帶圖片的后綴名职恳,并且沒有路徑,只有一個(gè)圖片名稱

注意:

  • 根據(jù)上面的代碼方面,可以看到放钦,需要指定圖片的大小(width和height),不然圖片無法顯示,因?yàn)榇思虞d方式不提供圖片安全檢查
  • 不同于上面的加載方式恭金,使用uri的加載方式可以實(shí)現(xiàn)字符串拼接操禀,解決了上面require中不能拼接的問題,因此横腿,如果需要使用拼接來實(shí)現(xiàn)加載颓屑,那么只需要將圖片放入原生項(xiàng)目對(duì)應(yīng)的目錄下

還有一點(diǎn)需要注意,就是上面的加載方式在android中默認(rèn)加載的drawable目錄下的圖片資源耿焊,如果想加載mipmap下的圖片資源揪惦,加載方式如下:

var nativeImageSource = require('nativeImageSource');
 
class RN_Image extends Component {
  render() {
    let ades = {
      android: 'mipmap/ic_launcher',
      width: 72,
      height: 72
    };
 
    return (
      <View style={styles.container}>
          <Image style={styles.image} source={nativeImageSource(ades)} />
      </View>
    );
  }
}
const styles = StyleSheet.create({
  container: {
      flex: 1,
      alignItems: 'center',
      backgroundColor: 'gray'
  },
  image: {
      backgroundColor: 'white',
      width: 120,
      height: 120,
  },
});

module.exports = RN_Image

nativeImageSource中可以指定圖片的寬高,如果在image的style中同時(shí)指定了圖片寬高的話罗侯,以style中的為準(zhǔn)器腋。

加載網(wǎng)絡(luò)圖片

<Image
    source = {{uri:'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png'}}
    style={styles.icon}
    resizeMode = 'cover'></Image>

? ? ?
?加載網(wǎng)絡(luò)圖片也是通過uri的方式來加載的

{uri:'圖片url'}

同上,此種方式也是需要指定圖片的大小(widht和height)的

Image常用屬性

source:標(biāo)記圖片的引用,填寫圖片路徑或者url
+ 大方

reseizeMode:設(shè)置圖片的填充模式纫塌,有三個(gè)可選值(默認(rèn)值時(shí)cover)

  • cover:等比例縮放圖片诊县,超出部分不顯示,使圖片最短邊占滿組件
  • contain:等比例縮放圖片措左,圖片顯示完全依痊,即縮放到最長(zhǎng)邊占滿組件
  • stretch:圖片拉伸適應(yīng)組件大小,圖片有可能會(huì)發(fā)生變形

我們來看看三種模式的顯示效果:

image

Image樣式屬性

  • borderColor:設(shè)置邊框顏色
  • borderWidth:設(shè)置邊框?qū)挾?/li>
  • borderRadius:設(shè)置邊框圓角
  • opacity:設(shè)置透明度(0~1之間媳荒,0表示透明抗悍,1表示不透明)
  • tintColor:著色,為所有非透明的像素指定一個(gè)顏色
  • backgroundColor:背景色(圖片有透明背景時(shí)钳枕,可能會(huì)用到)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缴渊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鱼炒,更是在濱河造成了極大的恐慌衔沼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔瞧,死亡現(xiàn)場(chǎng)離奇詭異指蚁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)自晰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門凝化,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酬荞,你說我怎么就攤上這事搓劫。” “怎么了混巧?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵枪向,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我咧党,道長(zhǎng)秘蛔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任傍衡,我火速辦了婚禮深员,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛙埂。我一直安慰自己辨液,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布箱残。 她就那樣靜靜地躺著滔迈,像睡著了一般止吁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燎悍,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天敬惦,我揣著相機(jī)與錄音,去河邊找鬼谈山。 笑死俄删,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奏路。 我是一名探鬼主播畴椰,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鸽粉!你這毒婦竟也來了斜脂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤触机,失蹤者是張志新(化名)和其女友劉穎帚戳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儡首,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡片任,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔬胯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片对供。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氛濒,靈堂內(nèi)的尸體忽然破棺而出产场,到底是詐尸還是另有隱情,我是刑警寧澤泼橘,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布涝动,位于F島的核電站迈勋,受9級(jí)特大地震影響炬灭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜靡菇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一重归、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厦凤,春花似錦鼻吮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽违柏。三九已至,卻和暖如春香椎,著一層夾襖步出監(jiān)牢的瞬間漱竖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工畜伐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留馍惹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓玛界,卻偏偏與公主長(zhǎng)得像万矾,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慎框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評(píng)論 25 707
  • 本文基于React Native 0.32 對(duì) 官方提供的Image組件進(jìn)行分析良狈。 Image是一個(gè)用于顯示多種圖...
    卑鄙的鹿尤菌閱讀 3,356評(píng)論 0 4
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,367評(píng)論 0 17
  • 前言 學(xué)習(xí)本系列內(nèi)容需要具備一定 HTML 開發(fā)基礎(chǔ)鲤脏,沒有基礎(chǔ)的朋友可以先轉(zhuǎn)至 HTML快速入門(一) 學(xué)習(xí) 本人...
    珍此良辰閱讀 20,657評(píng)論 15 16
  • 8月的天氣還是這么的悶熱们颜,我還是有點(diǎn)受不了的,但是心情煩悶跟天氣一點(diǎn)兒關(guān)系也沒有猎醇,倒跟家里的瑣事扯上關(guān)系窥突。 我一直...
    漪白閱讀 164評(píng)論 0 0