我使用的是@Composable,我需要通过参数an ImageBitmap传递,问题是我从服务器获取图像,给定一个URL,所以我需要加载这些图像,将它们转换为Bitmap,然后转换为ImageBitmap,但我遇到了很大的困难,因为我不知道如何将它转换为ImageBitmap,这是我的@Composable

@ExperimentalComposeUiApi
@Composable
fun MyCanvas(
    myImage: ImageBitmap,
    modifier: Modifier = Modifier,
) {
    Canvas(modifier = modifier
        .size(220.dp)
        .clipToBounds()
        .clip(RoundedCornerShape(size = 16.dp)) {

        ...
        val canvasWidth = size.width.toInt()
        val canvasHeight = size.height.toInt()
        val imageSize = IntSize(width = canvasWidth, height = canvasHeight)

        drawImage(
            image = myImage, dstSize = imageSize
        )
        ...
    }
}

所以,当我把它命名为@Composable时,我需要加载图像,但不确定如何开始,我需要知道使用Glide或Coil哪个更好.

推荐答案

您不需要ImageBitmap将其绘制到画布中.你可以在DrawScope里面画画师.您甚至实际上也不需要画布函数.androidx.compose.foundation.Canvas不是别的,就是空格和Modifier.drawBehind

@Composable
fun Canvas(modifier: Modifier, onDraw: DrawScope.() -> Unit) =
    Spacer(modifier.drawBehind(onDraw))

对你的问题的回答是

@Composable
private fun MyComposable() {
    val sizeModifier = Modifier
        .fillMaxWidth()

    val url =
        "https://avatars3.githubusercontent.com/u/35650605?s=400&u=058086fd5c263f50f2fbe98ed24b5fbb7d437a4e&v=4"

    Column(
        modifier =Modifier.fillMaxSize()
    ) {

      val painter =  rememberAsyncImagePainter(
            model = url
        )

        Canvas(modifier = Modifier
            .clip(RoundedCornerShape(size = 16.dp))
                .size(220.dp)
            ) {
                with(painter) {
                    draw(size = size)
                }
            }

    }
}

当您应用Modifier.lip()时,您不必应用Modifier.clipToBound()

这两种用法与Clip对Clip ToBound使用额外形状是一样的

/**
 * Clip the content to the bounds of a layer defined at this modifier.
 */
@Stable
fun Modifier.clipToBounds() = graphicsLayer(clip = true)

/**
 * Clip the content to [shape].
 *
 * @param shape the content will be clipped to this [Shape].
 */
@Stable
fun Modifier.clip(shape: Shape) = graphicsLayer(shape = shape, clip = true)

Android相关问答推荐

在Android中点击滑动时触发的手势

如何使用喷气背包压缩让Animated Image Vector每次动画化一条路径?

如何禁用Android 34+版的TileService,但保留以前的版本?

在Jetpack Compose中,如何判断屏幕是否已重新组合?

如何从sqlite数据库中检索数据到碎片android?

Android手柄注射周期错误,多个模块引用一个核心模块

在内部创建匿名对象的繁忙循环调用函数会产生开销吗?

如何在Jetpack Compose中将对象的移动从一个路径平滑地切换到另一个路径?

需要 java 17 而不是 java 11:Android CI-CD GitHub Actions

仅当先前输入为 yes 时,Android 才会要求下一个输入

Color.Transparent 和 Color.Unspecified 之间的区别

如何在 kotlin 中接收带有和不带有可空对象的集合并保持引用相同

Android apk 不工作

从活动共享视图模型以使用 hilt 组合函数

如何只允许拖动 BottomSheetScaffold 中 BottomContent 的 SheetPeek 的一部分?

单击 Jetpack Compose(单选)时,我无法为列表中的单个文本着色

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

将房间中的实体更新为 isCompleted 并使用 Flow 问题获取所有数据

如何在 Jetpack Compose 中禁用 TabRow 或 Tab 中的涟漪效应?

Android TTS 在屏幕关闭一段时间后停止朗读