我正在制作一个小地理应用程序,我希望在其中显示一个国家的国旗(svg)。 国旗图片资源在线链接(svg格式)。
例如:阿尔巴尼亚国旗->https://flagcdn.com/al.svg
这是我的代码:
flag = "https://flagcdn.com/al.svg"
val thread = Thread {
try {
val flagURL = URL(flag)
println("variable URL : ${flagURL }")
val flagValue = BitmapFactory.decodeStream(flagURL.openConnection().getInputStream())
println("variable in flagValue : ${flagValue}")
binding.flagValue.setImageBitmap(flagValue)
} catch (e: Exception) {
e.printStackTrace()
println("failed")
}
}
thread.start()
代码运行时,在try/catch部分检测到错误:
D/skia:---无法使用消息“未实现”创建图像解码器
I/System.out:flagValue 中的变量:null
我从这个 previously asked question 得到了我的代码,但它对我不起作用。有任何想法吗?谢谢
Coil 依赖有效,在 gradle 中添加以下依赖,
implementation("io.coil-kt:coil:1.2.0")
implementation("io.coil-kt:coil-svg:1.2.0")
并使用下面的代码,
fun ImageView.loadImageFromUrl(imageUrl: String) {
val imageLoader = ImageLoader.Builder(this.context)
.componentRegistry { add(SvgDecoder(this@Splashh))
}
.build()
val imageRequest = ImageRequest.Builder(this.context)
.crossfade(true)
.crossfade(300)
.data(imageUrl)
.target(
onSuccess = { result ->
val bitmap = (result as BitmapDrawable).bitmap
this.setImageBitmap(bitmap)
},
)
.build()
imageLoader.enqueue(imageRequest)
}
调用方法,
var flag = "https://flagcdn.com/al.svg"
img.loadImageFromUrl(flag)