一、什么是点九图?
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
网友评论