关于android:网络加载点九图资源变形问题解决方案

9次阅读

共计 1156 个字符,预计需要花费 3 分钟才能阅读完成。

点九图是安卓零碎中一种特有的图片格式,后缀名为 .9.png。点九图次要是解决图片拉伸变形问题,次要原理对图片部分进行拉伸,比方聊天气泡框,能够抉择只对两头区域进行拉伸,对边角不进行拉伸,这样气泡框就不会随着内容的变动而变形。如何抉择对那个区域拉伸,能够在 Android Studio 进行编辑,原理是在图片的边框加上纯黑的线条,线条区域就是可拉伸区域。

下图没有增加彩色边框,对图片整体拉伸导致图片显示变形。

下图增加了彩色边框,抉择了拉伸区域,图片不会变形。

然而,事件没有这么简略!!!

在开发过程中遇到一个需要,就是聊天气泡须要动静从网络端下载,而后从缓存中读取点九图片,然而加载进去的点九图片仍然变形。

不过解决办法还是有的,就是下图红色圈中的编译转换步骤,图片上传前先对点九图做个编译转换就能够失常显示了。编译转换须要用到 aapt。aapt 装置在那里呢?Android Studio 点击 File,抉择 Project Structure,抉择 SDK Location,获取到 Android SDK Location,则 aapt 的门路为 Android SDK Location/build-tools/***/aapt。

如下所示,对 bubble.9.png 进行 aapt 转换,生成的 bubble1.9.png 就是编译后的图片,从网络下载该图片图片不会变形。

aapt s -i /xxx/xxx/bubble.9.png -o /xxx/xxx/bubble1.9.png

点九图片如何从缓存加载呢?

Bitmap bitmap = BitmapFactory.decodeFile(resPath);
byte[]chunk = bitmap.getNinePatchChunk();
if (NinePatch.isNinePatchChunk(chunk)) {NinePatchDrawable drawable = new NinePatchDrawable(bitmap, chunk, new Rect(), null);
    mFlowAsrTxAnimation.setBackground(drawable);
    Log.d(TAG, "isNinePatchChunk");
} else {BitmapDrawable drawable = new BitmapDrawable(bitmap);
    mFlowAsrTxAnimation.setBackground(drawable);
    Log.d(TAG, "isNotNinePatchChunk");
}

留神: 在 Mac 上执行 aapt 命令,呈现 bash: aapt: command not found。解决方案将 Android SDK Location/build-tools/***/aapt 中的 aapt 拷贝到 /usr/local/bin 目录下即可。

正文完
 0