渲染网络图像并保持高度

时间:2017-08-13 19:15:47

标签: reactjs react-native react-native-image

React-native:0.47.1

当宽度为100%时,如何保持高度的纵横比?基本上我想在保持纵横比的同时自动缩放高度。图像将显示在FlatList中(不一定,如果我不满意,我很乐意更改FlatList)。图像显示在data

中设置的state数组中
export default class ImageTest extends Component {
  constructor(props) {
    super(props)
    this.state = {
      data : [
        {id: 1, name: "image1", url: "http://urlOfImage.com/1.jpg"}
        {id: 2, name: "image2", url: "http://urlOfImage.com/2.jpg"}
        {id: 3, name: "image3", url: "http://urlOfImage.com/3.jpg"}
        {id: 4, name: "image4", url: "http://urlOfImage.com/4.jpg"}
        {id: 5, name: "image5", url: "http://urlOfImage.com/5.jpg"}
      ];
    }
  }

  render() {
    return (
    <View style={styles.container}>
        <FlatList
            data={this.state.data}
            renderItem = {({item})=> 
               <Text style={styles.item}>{item.name}</Text>
               <Image 
                   source={uri: item.url}
                   style={styles.myImageStyle} />
            }
        />
    </View>
    )
  }
}

const styles = StyleSheet.create(
  myImageStyle: {
    width: Dimensions.get('window').width,
    height: /* WHAT DO I PUT HERE ?? */
  }
)

因此图像的高度可能不同,原始高度可能是700像素,有些可能是1200像素,甚至是方形图像。我如何定义每个图像的高度,因为它们来自数组?

非常感谢

1 个答案:

答案 0 :(得分:2)

您可以从URI获取图像的尺寸。您可以使用getSize()组件中包含的静态方法Image遍历数组并获取每个图像的尺寸。这是documentation for this method

示例:

const preloadedImgData = []
this.state.data.forEach((img) => {
   Image.getSize(img.url, (w, h) => {
      img.dimensions = {w, h}
      preloadedImgData.push(img)
   })
})

我不确定上述代码是否100%正确,但您明白了这一点:)

编辑:

此外,您可以使用此模块,该模块应该为您完成所有事情:react-native-fit-image

- 我不是此模块的所有者