Реагируйте на исходное изменение масштаба изображений разных размеров, чтобы вместить контейнер

Наличие большого количества изображений всех разных измерений, поступающих из uri веб-адрес. Я реализовал в виде прокрутки, который показывает несколько карт, каждая из которых имеет изображение, теперь, хотя некоторые изображения отображаются достаточно хорошо, некоторые обрезаются из-за их размеров, и вписываясь в контейнер, я хочу, чтобы все изображение было вписано в указанный контейнер каждой карты без потери какого-либо изображения. Обратите внимание, что каждая карта имеет заданную ширину и высоту, карты не должны быть динамическими.

<View style={Styles.ImageCard.imageCardContainer} onLayout={this.onLayout}>
    <Image
        style={[Styles.ImageCard.imageContainer, { width: this.state.width || '100%', height: this.state.height }]}
        source={{uri: this.props.card.icon}}
        resizeMode={Image.resizeMode.cover}
    />
</View>

ImageCardContainer

imageCardContainer: {
    flex: 1,
    borderWidth: 0.5,
    borderRadius: 15,
    borderColor: Colors.gray.normal,
    elevation: 1,
    shadowOpacity: 0.2,
    shadowOffset: {
      height: 0,
      width: 0,
    },
    marginVertical: 5,
    marginHorizontal: 15,
    overflow: 'hidden',
},

imageContainer

imageContainer: {
    flex: 1,
    borderTopLeftRadius: 15,
    borderTopRightRadius: 15,
    alignSelf: 'center',
    overflow: 'hidden',
},

ImageGetSize

  // Handle on layout to get the width and height of the card.
  onLayout = async event => {
    if (this.state.dimensions) return // layout was already called
    let {width, height} = event.nativeEvent.layout
    this.setState({dimensions: {width, height}})

    // get the image to set the max height width and set the ratio.
    Image.getSize(this.props.card.icon, (srcWidth, srcHeight) => {
        const maxHeight = this.state.dimensions.height; // or something else
        const maxWidth = this.state.dimensions.width;

        const ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);
        this.setState({ width: srcWidth * ratio, height: srcHeight * ratio });
        console.log('ratio', ratio);          
      }, error => {
        console.log('error:', error);
      });
  }

Что бы вы предложили, пожалуйста? Неужели на сервере все изображения должны быть масштабированы до фиксированных размеров для этой карты? А как насчет того, где это не сделано, можно ли повторно масштабировать изображения на устройстве?

Большое спасибо за вашу помощь!

0 ответов