业务开发中会偶尔遇到使用远程9-patch图的情况。具体操作:
1、本地创建9-patch图
可以在工程的debug/res/的drawable目录中创建
2、使用aapt编译创建好的9-path图
例如编译某个目录:
aapt c -v -S ../app/src/debug/res/drawable-xxhdpi/ -C out
亦可使用 “aapt s ”命令编译单个文件
3、上传到服务端
将编译好的文件上传至服务器
4、客户端下载展示
最核心的是要判断Bitmap是否是9-patch图:
private void callbackBitmap(Bitmap resource) {
try {
//读取9-patch信息
byte[] ninePatchChunk = resource.getNinePatchChunk();
if (DEBUG) {
boolean isNinePatchChunk = false;
if (ninePatchChunk != null) {
isNinePatchChunk = NinePatch.isNinePatchChunk(ninePatchChunk);
}
Log.i(TAG, "fetch.onSuccess: ninePatchChunk = " + ninePatchChunk + ", isNinePatchChunk = " + isNinePatchChunk);
}
//判断是否是9-patch图
if (ninePatchChunk != null && NinePatch.isNinePatchChunk(ninePatchChunk)) {
NinePatchDrawable ninePatchDrawable = new NinePatchDrawable(resource, ninePatchChunk, new Rect(), null);
if (mLoadCallback != null) {
mLoadCallback.onDrawableReady(ninePatchDrawable);
}
} else {
showAsDefaultBitmap(resource);
}
} catch (Throwable e) {
showAsDefaultBitmap(resource);
}
}
完整文件:https://github.com/gongshoudao/Remote-9-patch/blob/main/NinePatchHelper.java