AOS中使用远程9-patch图

业务开发中会偶尔遇到使用远程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