【问题标题】:Render network images and maintain aspect ratio for height渲染网络图像并保持高度的纵横比
【发布时间】:2018-01-21 16:06:07
【问题描述】:

反应原生: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 ?? */
  }
)

所以图像的高度可能会有所不同,原始高度可能是 700px,有些可能是 1200px,甚至是方形图像。由于每个图像来自数组,我将如何定义它们的高度?

非常感谢

【问题讨论】:

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


【解决方案1】:

您可以从 URI 中获取图像的尺寸。您可以遍历您的数组并使用包含在Image 组件中的静态方法getSize() 获取每个图像的尺寸。这是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

- 我不是这个模块的所有者

【讨论】:

  • 有效! fit-image 模块成功了。我要去探索它,看看他们是如何让它工作的。到目前为止,它不适用于本地图像,但它太棒了!万分感谢。实际上,我对它进行了简短的查看并跳过了它,因为第一个示例中提到了事先提到的尺寸。我应该测试一下。再次感谢队友。干杯!!
  • npmjs.com/package/react-native-fit-image 就像一个魅力......
猜你喜欢
  • 2013-07-07
  • 2017-02-13
  • 2015-07-31
  • 2013-02-26
  • 2015-08-27
  • 2016-10-31
  • 2021-06-12
  • 1970-01-01
  • 2019-11-14
相关资源
最近更新 更多