gpt4 book ai didi

android - 如何创建基于远程加载的图像大小自动调整大小的 Jetpack Compose 图像?

转载 作者:行者123 更新时间:2023-12-05 00:09:53 35 4
gpt4 key购买 nike

我想显示具有以下规则的图像:

  • 图像是远程的,需要在运行时加载。
  • 在加载之前,我们不知道图像的大小。
  • Image View 应该采用父级的全宽,并且应该自动调整其高度以匹配远程加载的图像,这样就不会发生裁剪/拉伸(stretch)。

  • 我尝试使用 Coil dependency我有这个代码:
    Image(
    painter = rememberImagePainter(viewModel.fullImageUrl),
    contentDescription = null,
    contentScale = ContentScale.FillHeight,
    modifier = Modifier
    .fillMaxWidth()
    .aspectRatio(3.21428f) // TODO: Figure out how to set height/ratio based on image itself
    )
    当我删除 ImagecontentScalemodifier ,它的高度似乎总是为零。我不确定我应该怎么做 Image在 Coil 加载图像文件后,在确定自己的大小的同时填充其父级的最大宽度。

    最佳答案

    当您使用 fillMaxWidth 设置灵活宽度时, 你需要使用 ContentScale.FillWidth为您的contentScale :

    Image(
    painter = rememberImagePainter(
    "https://via.placeholder.com/300.png",
    ),
    contentDescription = null,
    contentScale = ContentScale.FillWidth,
    modifier = Modifier
    .fillMaxWidth()
    )

    如果您的图像具有足够的优先级,以下将正常工作。但在某些情况下 coil不会开始加载,因为它会认为图像是零大小,所以不需要显示它。对于这种情况,您可以添加 size(OriginalSize)构建器的参数:
    rememberImagePainter(
    "https://via.placeholder.com/300.png",
    builder = {
    size(OriginalSize)
    }
    )
    此参数使您的 View 下载并放入图像的完整大小的内存中,而不针对当前 View 进行优化。所以用它 仔细 ,仅当您确定图像不会太大并且您确实无法添加使用尺寸修饰符时。

    如果图像正在加载但仍然没有占用足够的空间,您可以像这样设置纵横比:
    val painter = rememberImagePainter("https://via.placeholder.com/300.png")
    Image(
    painter = painter,
    contentDescription = null,
    contentScale = ContentScale.Fit,
    modifier = Modifier
    .fillMaxWidth()
    .then(
    (painter.state as? ImagePainter.State.Success)
    ?.painter
    ?.intrinsicSize
    ?.let { intrinsicSize ->
    Modifier.aspectRatio(intrinsicSize.width / intrinsicSize.height)
    } ?: Modifier
    )
    )
    如果这些都没有帮助, painter.stateEmpty 不变, 尝试硬编码高度 ?: Modifier.height(10.dp)让图像开始加载

    关于android - 如何创建基于远程加载的图像大小自动调整大小的 Jetpack Compose 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68848663/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com