React Native Image多种加载图片方式

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC" }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Menlo; color: #608b4e; background-color: #1e1e1e }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; background-color: #ffffff; min-height: 17.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; background-color: #ffffff }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Menlo; color: #9cdcfe; background-color: #1e1e1e }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Menlo; color: #d4d4d4; background-color: #1e1e1e }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; background-color: #ffffff; min-height: 17.0px }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; background-color: #ffffff }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Menlo; color: #ce9178; background-color: #1e1e1e }
p.p11 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; background-color: #ffffff; min-height: 14.0px }
span.s1 { font: 12.0px "PingFang SC" }
span.s2 { }
span.s3 { color: #808080 }
span.s4 { color: #4ec9b0 }
span.s5 { color: #d4d4d4 }
span.s6 { color: #b5cea8 }
span.s7 { color: #ce9178 }
span.s8 { color: #9cdcfe }
span.s9 { color: #569cd6 }
span.s10 { color: #dcdcaa }

React-Native  Image加载图片方式解析

1.加载当前工程文件夹下图片

<Image style={styles.image} source={require(‘./TT2.jpg‘)} />

2.加载当前应用沙盒文件内图片

分析:

假定图片存储在document文件夹下(document/TT1.jpg)

理论上这个加载方式和第一种默认似乎一样(都是路径),

实际上require里面的参数只能是工程文件夹内部的图片,并且参数不能是变量。

(require(this.state.localPath)  这种是错误的)

正确方式:

用 uri,这里就需要在js文件中获取当前应用的沙盒路径(document路径),

于是我就天真的开始寻找js如何获取app的沙盒路径,然并卵。。。。。。

恍然大悟:React-Native并非万能,也无法完全取代原生,这就是我的一个学习误区,

实际上开发过程中需要两者相辅相成

实现逻辑如下:

1.创建OC类,MDHFileManager并与js文件实现数据传递

2.MDHFileManager: 负责获取图片沙盒路径,并callback给js文件

3.js:收到OC类的回调后,更新state中参数(state参数改变,对应Image组件就会刷新)

this.state.ok 来处理placeholderImage

<Image style = {{width:  300, height: 200, backgroundColor:‘white‘}}

source = {this.state.ok ? {uri: this.state.localImagePath} : require(‘./TT4.jpg‘)}

resizeMode = {‘contain‘}/>

3.加载网络图片(不过多赘述)

<Image style = {{width:  300, height: 300, backgroundColor:‘white‘}}

source = {{uri: ‘http://facebook.github.io/react/img/logo_og.png‘}}

resizeMode = {‘contain‘}

/**

* Sample React Native App

* https://github.com/facebook/react-native

* @flow

*/

import React, { Component } from ‘react‘;

import {

AppRegistry,

StyleSheet,

Text,

Image,

View,

NativeModules

} from ‘react-native‘;

var FileManager = NativeModules.MDHFileManager

export default class SS extends Component {

constructor(props) {

console.log(‘ 1111111**********++++++++++ constructor‘);

super(props);

this.state = {

‘localImagePath‘ : ‘‘,

‘ok‘:false

}

}

componentWillMount() {

/**

* 此函数调用时机是在组件创建,并初始化了状态之后,在第一次绘制render()之前

* 可以在这里做一些业务初始化操作,也可以设置组件状态,整个生命周期中只被调用一次

*/

console.log(‘222222++++++++++ componentWillMount‘);

FileManager.imageLocalPathCallBack((path)=>{

console.log(‘ **********++++++++++ path‘ + path);

this.setState({

‘localImagePath‘:path,

‘ok‘:true

})

})

}

componentDidMount() {

console.log(‘44444++++++++++ componentDidMount‘);

/**

* 在组件第一次绘制后,会调用,通知组件以及加载完成。

*/

}

render() {

console.log(‘33333**********++++++++++ render‘ );

return (

<View style={styles.container}>

<View style = {{width: 300, height: 300, backgroundColor:‘white‘}}>

<Image style = {{width: 300, height: 200, backgroundColor:‘white‘}}

source = {this.state.ok ? {uri: this.state.localImagePath} : require(‘./TT4.jpg‘)}

resizeMode = {‘contain‘}/>

<Text style={styles.welcome}>加载document目录下图片</Text>

</View>

<View style = {{width: 300, height: 300, backgroundColor:‘white‘}}>

<Image style = {{width: 300, height: 200}}

source = {require(‘./TT2.jpg‘)}

resizeMode = {‘contain‘}

/>

<Text style={styles.welcome}>加载工程文件夹下的图片</Text>

</View>

<View style = {{width: 300, height: 300, backgroundColor:‘white‘}}>

<Image style = {{width: 300, height: 300, backgroundColor:‘white‘}}

source = {{uri: ‘http://facebook.github.io/react/img/logo_og.png‘}}

resizeMode = {‘contain‘}

/>

<Text style={styles.welcome}>加载网络图片</Text>

</View>

</View>

);

}

}

const styles = StyleSheet.create({

container: {

flex: 1,

justifyContent: ‘center‘,

alignItems: ‘center‘,

backgroundColor: ‘#F5FCFF‘,

},

welcome: {

fontSize: 20,

textAlign: ‘center‘,

margin: 10,

color:‘red‘

},

instructions: {

textAlign: ‘center‘,

color: ‘#333333‘,

marginBottom: 5,

},

});

AppRegistry.registerComponent(‘SS‘, () => SS);

时间: 2024-10-13 12:03:01

React Native Image多种加载图片方式的相关文章

三种基本网络加载图片方式

代码片段(6) [全屏查看所有代码] 1. [代码]普通加载网络方式     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 public class NormalLoadPictrue {   

android三种加载图片方式

package smalt.music.utils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; //载入图片的方法:3种 public class BitmapUntil { // 直接加载图片 public static Bitmap getBitmap(String path) { Bitmap bt

Spring多种加载Bean方式简析

1 定义bean的方式 常见的定义Bean的方式有: 通过xml的方式,例如: <bean id="dictionaryRelMap" class="java.util.HashMap"/> 通过注解的方式,在Class上使用@Component等注解,例如 @Component public class xxxServicer{ .... } 通过在@Configuration类下的@Bean的方式,例如 @Configuration public c

Listview异步加载图片之优化篇

在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是考量程序性能的一个重要指标.关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化.有鉴于此,本人在网上找了个相对理想的版本并在此基础上进行改造,下面就让在下阐述其原理以探索个中奥秘,与诸君共赏… 贴张效果图先: 2013-2-1 17:25 上传 下载附件 (214.08 KB) 异步加载图片基本思想: 1.      先从内存缓存中获取图片显示(内

Android三种基本的加载网络图片方式(转)

Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式) 用两种方法来实现网络加载图片 方法1:实现的效果:先加载背景色灰色,两秒后加载图片 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor=[UIColor grayColor]; //刷新UI(在主线程中刷新UI!!!) --- 一般方法 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PR

002-UIImageView和UIButton对比 UIImageView的帧动画 格式符补充 加载图片两种方式 添加删除SUBVIEW

一>.UIImageView和UIButton对比 显示图片 1> UIImageView只是一种图片(图片默认会填充整个UIImageView)  image\setImage: 2> UIButton能显示2种图片 * 背景 (背景会填充整个UIButton)  setBackgroundImage:forState: * 前置(覆盖在背景上面的图片,按照之前的尺寸显示)  setImage:forState: * 还能显示文字 点击事件 1> UIImageView默认是不能

AsyncTask加载网络Json及其解析Json---------Thread和AsyncTask加载图片2种方式

源码  http://download.csdn.net/detail/u013210620/8955435 首先看主线程布局 activity_main.xml(里面只有一个listview) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layo

UIImage加载图片的方式以及Images.xcassets对于加载方法的影响

图片缓存 根据是否将创建好的对象缓存入系统内存,有两类创建UIImage对象的方法可选: 缓存:+ imageNamed:,只需传入文件名.扩展名(可选)即可. 不缓存:+ imageWithContentsOfFile:,必须传入文件的全名(全路径+文件名). 注意,对于有缓存功能的方法来说,其创建对象的步骤如下: 根据图片文件名在缓存池中查找特定的UIImage对象,若存在这个对象,将此对象返回. 如果不存在这个对象,则从mainBundle中加载图片数据,创建对象并返回. 如果相应的图片数