(Kotlin - 使用在线 URL svg 图像设置 ImageView)D/skia:--- 无法使用消息“未实现”创建图像解码器

问题描述 投票:0回答:1

我正在制作一个小地理应用程序,我希望在其中显示一个国家的国旗(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 得到了我的代码,但它对我不起作用。有任何想法吗?谢谢

android kotlin inputstream decode bitmapfactory
1个回答
0
投票

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)

© www.soinside.com 2019 - 2024. All rights reserved.