如何将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,
)