1. 程式人生 > >ReactNative中Image元件載入方式

ReactNative中Image元件載入方式

Image元件載入方式

從當前專案中載入

  • 圖片資原始檔的查詢和JS模組相似,會根據填寫的圖片路徑相對於當前的js檔案路徑進行搜尋。
  • React Naive的Packager會根據平臺選擇相應的檔案,例如:my_icon.ios.png和my_icon.android.png兩個檔案(命名方式android或者ios),會分別根據android或者ios平臺選擇相應的檔案。
  • Packager會打包所有的圖片並且依據螢幕精度提供對應的資源。譬如說,iPhone 5s會使用[email protected],而Nexus 5上則會使用[email protected]。如果沒有圖片恰好滿足螢幕解析度,則會自動選中最接近的一個圖片。
  • 注意:如果你新增圖片的時候packager正在執行,可能需要重啟packager以便能正確引入新新增的圖片。
  • 這樣處理的優勢:
    • iOS和Android一致的檔案系統。
    • 圖片和JS程式碼處在相同的資料夾,這樣元件就可以包含自己所用的圖片而不用單獨去設定。
    • 不需要全域性命名。你不用再擔心圖片名字的衝突問題了。
    • 只有實際被用到(即被require)的圖片才會被打包到你的app。
    • 與訪問網路圖片相比,Packager可以得知圖片大小了,不需要在程式碼裡再宣告一遍尺寸。
    • 現在通過npm來分發元件或庫可以包含圖片了。
    • 注意:為了使新的圖片資源機制正常工作,require中的圖片名字必須是一個靜態字串(不能使用變數!因為require是在編譯時期執行,而非執行時期執行!)。
export default class App5 extends Component<{}> {
  render() {
    return (
      <View style={styles.container}>
         <Image source={require('./image/NO.png')} style={{width: 120, height: 120}}  />
      </View>
    );
  }
}

載入使用APP中的圖片

如果你在編寫一個混合App(一部分UI使用React Native,而另一部分使用平臺原生程式碼),也可以使用已經打包到App中的圖片資源(以拖拽的方式放置在Xcode的asset類目中,或是放置在Android的drawable目錄裡)。注意此時只使用檔名,不帶路徑也不帶字尾

  • 在iOS中
<View style={styles.container}>
         <Image source={{uri: 'BG1'}} style={{width: 120, height: 120}} />
      </View>
  • 在Android中
 <View style={styles.container}>
         <Image source={{uri: 'asset:/BG1.png'}} style={{width: 40, height: 40}} />
      </View>

載入來自網路的圖片

  • 客戶端的很多圖片資源基本上都是實時通過網路進行獲取的,但是需要指定圖片的尺寸大小
  • 強烈建議你使用https以滿足iOS App Transport Security 的要求

  • 關於resizeMode屬性

    • Image.resizeMode.cover:圖片居中顯示,沒有被拉伸,超出部分被截斷
    • Image.resizeMode.contain:容器完全容納圖片,圖片等比例進拉伸
    • Image.resizeMode.stretch: 圖片被拉伸適應容器大小,有可能會發生變形
<View style={styles.container}>
         <Image source={{uri:'https://www.baidu.com/img/bd_logo1.png'}}style={{width:100, height:100, resizeMode: Image.resizeMode.contain}}/>
      </View>

設定背景圖片

<View style={styles.container}>
         <ImageBackground source={{uri:'https://www.baidu.com/img/bd_logo1.png'}} style={{marginTop:20,
    marginLeft:20,flex:1,width:200, height:100,}}>
           <Text style={{marginTop: 60, backgroundColor: 'red'}}>下面是背景圖片</Text>
        </ImageBackground>
      </View>

效果:
這裡寫圖片描述

Image元件的常見屬性

  • onLayout(function)
    當Image佈局發生改變的,會進行呼叫該方法,呼叫的程式碼為:{nativeEvent: {layout: {x, y, width, height}}}.

  • onLoad (function)
    當圖片載入成功之後,回撥該方法

  • onLoadEnd (function)
    當圖片載入失敗回撥該方法,該不會管圖片載入成功還是失敗
  • onLoadStart (fcuntion)
    當圖片開始載入的時候呼叫該方法
  • resizeMode
    縮放比例,可選引數(‘cover’, ‘contain’, ‘stretch’) 該當圖片的尺寸超過佈局的尺寸的時候,會根據設定Mode進行縮放或者裁剪圖片
  • source{uri:string}
    進行標記圖片的引用,該引數可以為一個網路url地址或者一個本地的路徑

Image元件的樣式風格屬性

  • FlexBox 支援彈性盒子風格
  • Transforms 支援屬性動畫
  • backgroundColor 背景顏色
  • borderColor 邊框顏色
  • borderWidth 邊框寬度
  • borderRadius 邊框圓角
  • overflow 設定圖片尺寸超過容器可以設定顯示或者隱藏(‘visible’,’hidden’)
  • tintColor 顏色設定
  • opacity 設定不透明度0.0(透明)-1.0(完全不透明)

相關推薦

ReactNativeImage元件載入方式

Image元件載入方式 從當前專案中載入 圖片資原始檔的查詢和JS模組相似,會根據填寫的圖片路徑相對於當前的js檔案路徑進行搜尋。 React Naive的Packager會根據平臺選擇相應的檔案,例如:my_icon.ios.png和my_icon.

angular2動態元件載入

參考:angular2(4) 中動態建立元件的兩種方案 參考:DEVELOPING A TABS COMPONENT IN ANGULAR 參考:Create a dynamic tab component with Angular 解析:官網案例 元件的模板不會永遠是固

reactnative父子元件component執行順序

test1.js import React, { Component } from 'react'; import { View, } from 'react-native'; import Test2 from "./Test2"; export

淺談Entity Framework的資料載入方式

如果你還沒有接觸過或者根本不瞭解什麼是Entity Framework,那麼請看這裡http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文章以非常簡單易懂的形式一步步

ReactNativeImage元件自適應高度,圖片自適應大小

因為在現在0.50包括之前的ReactNative版本,Image元件必須要設定寬高才能顯示。所以在圖片寬高不確定的情況下,如何來讓圖片自適應螢幕高度呢?需求原因:因為做商城詳情頁面的圖片長短不一,所以要自適應圖片顯示高度。這個需求就產生了。以下方法:getSize方法 傳入

Unity3D刪除元件方式

轉載自:http://bbs.9ria.com/thread-202660-1-1.html 在Unity中有幾種刪除元件的方式: //銷燬遊戲物件。 Destroy (gameObject); 複製程式碼 //從遊戲物件刪除該指令碼例項。 Dest

reactNativeView元件的簡單使用(六)

在ReactNative裡有一個類似於div的元件,那就是view元件,支援多層巢狀,支援flexbox佈局 實現效果如圖: 1.載入view元件 2.建立元件 3.新增樣式表 4.註冊入口 5.外層佈局 6.flex水平三欄佈局 7.上下兩欄佈局 8.完善效果 imp

【轉】QmlImage載入圖片再不同平臺的方式

今天用QML中Image載入win系統下的本地路徑圖片的時候, 發現無論加絕對路徑或file://+path都打不開,就很奇怪,經過一番 查閱發現,各個系統的載入方式都不相同, win系統:     Image {             id:  preview

在activity載入fragment的兩個方式以及獲取fragment的控制元件方式

public class MainActivity extends Activity { Button show ,show2; FragmentManager fragmentManager; FragmentTransaction fragmentTransac

關於安卓RecyclerView元件使用檢視不載入的bug

09-21 14:33:26.382 3791-3791/com.example.kylochen.xiaoherobot E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.kylochen.xiaoherobot, P

ReactNative 開發之元件的建立方式

元件的建立方式分為三種: 函式式 ES5 ES6 函式式: function HelloWord(){ return <Text style={{fontSize:26}}>Hello Word</Text> } mo

Vue父子元件傳值的方式

父元件向子元件傳值 父元件呼叫子元件時,在標籤上繫結動態屬性 <template> <div id='parent'> <v-child :title='title' :run='run'></v-child&g

一對一視訊交友原始碼關於圖片載入和部分自定義控制元件的原始碼

有這麼一部分原始碼,他們不如音視訊採集、播放部分的原始碼顯得那麼重要,但他們的存在使頁面看起來更美觀流暢,他們就是: 一、關於圖片載入的一段程式碼: 1、載入原圖,即沒有壓縮、裁剪、變換之前的圖,保持了原圖的大小、尺寸和解析度。 public static void displaySou

spring給容器註冊元件的幾種方式,1.包掃描+元件標註註解[email protected](

              給容器中註冊元件;        1)、包掃描+元件標註註解(@Controller/@Service/@Repository/@Component)[

InnoDB緩衝池預載入在MySQL 5.7的正確開啟方式

DBAplus社群譯者:徐肖霞(新炬網路DBA工程師) 譯文稽核:葛雲傑 在這篇文章裡,我將討論在MySQL 5.7裡如何使用InnoDB緩衝池預載入特性。 從MySQL 5.6開始,可以配置MySQL儲存InnoDB快取池的資料,並在啟動時載入。在MySQL 5.7後,這是預設行為。在預設配置中,

image 控制元件載入bmp、JPG、GIF、PNG等圖片的辦法

procedure TForm1.Button1Click(Sender: TObject); var jpg: TJPEGImage; // 要use Jpeg單元 png: tpngimage; gif: tgifimage; begin jpg := TJPEGImage.Cr

Android外掛化原理和實踐 (三) 之 載入外掛元件程式碼

我們在上一篇文章《Android外掛化原理和實踐 (二) 之 載入外掛中的類程式碼》中埋下了一個懸念,那就是通過構造一個DexClassLoader物件後使用反射只能反射出普通的類,而不能正常使用四大元件,因為會報出異常。今天我們就來解開這個懸念和提出解決方法。 1 揭開懸念 還記得《A

mybatisconfig檔案載入mapper檔案的4方式(自己用的,看不懂勿怪)

<!-- 最簡單的引用方式,直接引入xml檔案 --> <mappers> <!-- 最簡單的引用方式,直接引入xml檔案 --> <mapper resource="config/TSysUserMapper.xml"/> <

Unity資源動態載入的幾種方式比較

初學Unity的過程中,會發現打包釋出程式後,unity會自動將場景需要引用到的資源打包到安裝包裡,沒有到的不會跟進去。我們在編輯器裡看到的Asset中的檔案結構只是工作於編輯器環境下的,在遊戲中unity會重新組織資料庫。這是我們一定會遇到一個需求,即動態的載入我們自己的

【Unity】Unity資源動態載入的兩種方式之AssetsBundle

首先要說的是,我們的工程中有2個指令碼,分別是:Build(編輯器類指令碼,無需掛載到任何物體),但是必須要把Build指令碼放到Editor資料夾中Load指令碼,掛載到攝像機上<pre name="code" class="csharp">using Uni