美文网首页
Glide加载远程点9图

Glide加载远程点9图

作者: 寻水的鱼Chock | 来源:发表于2023-04-11 14:24 被阅读0次
一、什么是点九图?

Andriod 平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png。
当.9图放在开发工程目录文件夹内时编译工具能正常处理图片,使其能像使用其他正常图片一样使用它。但是当我们需要从云端加载时,问题就出现了,图片并不能像预期一样进行拉伸。

二、需要增加哪些处理?

1、需要对文件扩展名为:.9.png的图片进行预处理,编译为带chunk的png图片(预览看起来跟正常图片无异);
2、从远端下载并加载它到视图中。

如何进行预处理?
需要使用SDK包下appt命令生成目标文件,并将其上传至云端。

`aapt s -i [文件名] -o [文件名]`

如何从远端下载?
可以使用Glide工具下载并缓存文件。

suspend fun View.load9Png(url: String?) {
    var bitmap: Bitmap?
    val pad = Rect()
    withContext(Dispatchers.IO) {
        val file = Glide.with(context)
            .downloadOnly()
            .load(url)
            .submit().get()
        val ins = FileInputStream(file)
        bitmap = BitmapFactory.decodeStream(ins, pad, BitmapFactory.Options())
        ins.close()
    }
    try {
        bitmap?.let {
            val chunk = it.ninePatchChunk
            background = if (chunk != null && NinePatch.isNinePatchChunk(chunk)) {
                val ninePatchDrawable = NinePatchDrawable(
                    resources, bitmap, chunk, pad, null
                )
                ninePatchDrawable
            } else {
                BitmapDrawable(context.resources, it)
            }
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}
三、跟其它网络上能够找到的方案有何异同?

不需要额外增加源码: NinePatchChunk.java,全部使用Android库。

val pad = NinePatchChunk.deserialize(chunk).mPaddings

参考: https://blog.csdn.net/kyle499899161/article/details/79283933

如果本文对你有帮助就点个赞支持下吧~~~

相关文章

网友评论

      本文标题:Glide加载远程点9图

      本文链接:https://www.haomeiwen.com/subject/fhegddtx.html