如何将url加载到Compose UI Android Jetpack中的DrawImage中?

如何将url加载到Compose UI Android Jetpack中的DrawImage中?,android,image-processing,kotlin,drawimage,android-jetpack-compose,Android,Image Processing,Kotlin,Drawimage,Android Jetpack Compose,我可以用 val image=+imageResource(R.drawable.header) 并使用DrawImage(image)从可绘制资源加载图像 但是如何将字符串url加载到DrawImage(image)?。我尝试过使用Glide,但它需要加载到imageView中。同时,DrawImage(image)不从imageView获取输入 谢谢。由于某些原因,Jetpack compose中仍然没有添加它的支持。但目前,你可以使用这个类 要使用它,您需要以以下方式调用它: Image

我可以用
val image=+imageResource(R.drawable.header)
并使用
DrawImage(image)
从可绘制资源加载图像

但是如何将字符串url加载到
DrawImage(image)
?。我尝试过使用Glide,但它需要加载到imageView中。同时,
DrawImage(image)
不从imageView获取输入


谢谢。

由于某些原因,Jetpack compose中仍然没有添加它的支持。但目前,你可以使用这个类

要使用它,您需要以以下方式调用它:

Image(
  <your image url>,
  144.dp,
  96.dp
  )
}
图像(
,
144.dp,
96.dp
)
}
你可以看看我是怎么用的。
从url加载位图并使用位图扩展方法的解决方案:

@Composable
fun loadPicture(url: String): UiState<Bitmap> {
    var bitmapState: UiState<Bitmap> by state<UiState<Bitmap>> { UiState.Loading }

    Glide.with(ContextAmbient.current)
        .asBitmap()
        .load(url)
        .into(object : CustomTarget<Bitmap>() {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                bitmapState = UiState.Success(resource)
            }

            override fun onLoadCleared(placeholder: Drawable?) { }
        })

    return bitmapState
}
@Composable
趣味加载图片(url:String):UiState{
var bitmapState:UiState by state{UiState.Loading}
使用(ContextAmbient.current)滑动
.asBitmap()
.load(url)
.into(对象:CustomTarget(){
覆盖资源就绪(资源:位图,转换:转换?){
bitmapState=UiState.Success(资源)
}
重载已清除(占位符:可绘制?{}
})
返回位图状态
}
将函数与Image()一起使用,如下所示:

val loadPictureState = loadPicture(url)
if (loadPictureState is UiState.Success<Bitmap>)
    Image(loadPictureState.data.asImageAsset())
else
    Text("Loading...")
val loadPictureState=loadPicture(url)
if(loadPictureState为UiState.Success)
图像(loadPictureState.data.asImageAsset())
其他的
文本(“加载…”)

此代码段使用的是官方Google Jetpack Compose示例中的库和帮助函数

您可以使用
记住
观看位图,然后使用Glide获取位图,并在获得位图后立即更新

var bitmap by remember { mutableStateOf<Bitmap?>(null)}

Glide.with(ContextAmbient.current).asBitmap()
    .load("https://picsum.photos/200/300")
    .into(object : CustomTarget<Bitmap>() {
        override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
             bitmap = resource
          }

          override fun onLoadCleared(placeholder: Drawable?) {}
      })

(这是的现代版本)

在Jetpack的beta版发布后,使用-Utils库进行Jetpack Compose是上述用例最干净的方式。

使用
1.0.0-beta06
实现这一目标的最佳方式是使用github上google repo上提供的库

Companist是一组库,旨在用开发人员通常需要但尚未提供的功能补充Jetpack Compose

是目前针对滑翔式飞机的最佳解决方案

添加您的
build.gradle
依赖项

repositories {
    mavenCentral()
}

dependencies {
    implementation "com.google.accompanist:accompanist-glide:<version>"
}
这将加载随
rememberGlidePainter
传入的
url
,然后使用标准的
图像
组合显示生成的图像。

用于Jetpack组合的线圈 从internet加载图像的另一个选项

将线圈相关性添加到
build.gradle

dependencies {
    implementation "com.google.accompanist:accompanist-coil:<version>" // 0.8.1 
}
别忘了添加internet权限(AndroidManifest.xml)


这里有更多的定制:

然后

    import androidx.compose.foundation.Image
    import com.google.accompanist.glide.rememberGlidePainter
    
    Image(
        painter = rememberGlidePainter("https://picsum.photos/300/300"),
        contentDescription = stringResource(R.string.image_content_desc),
        previewPlaceholder = R.drawable.placeholder,
    )

我认为这还没有得到支持。不要忘记构图仍然在DEV预览中。你必须去旧学校,然后自己加载图像,看一看::-)你可以检查要点:这是过时的,不能再使用了(也可以考虑从一个不可组合的函数中删除<代码> @可复合的< /代码>注释。)
dependencies {
    implementation "com.google.accompanist:accompanist-coil:<version>" // 0.8.1 
}
import androidx.compose.foundation.Image
import com.google.accompanist.coil.rememberCoilPainter

Image(
    painter = rememberCoilPainter("https://picsum.photos/300/300"),
    contentDescription = stringResource(R.string.image_content_desc)
)
<uses-permission android:name="android.permission.INTERNET"/>
    repositories {
    mavenCentral()
}

dependencies {
    implementation "com.google.accompanist:accompanist-glide:0.10.0"
}
    import androidx.compose.foundation.Image
    import com.google.accompanist.glide.rememberGlidePainter
    
    Image(
        painter = rememberGlidePainter("https://picsum.photos/300/300"),
        contentDescription = stringResource(R.string.image_content_desc),
        previewPlaceholder = R.drawable.placeholder,
    )