您的位置:首页 > 移动开发 > Android开发

Android 下发或Assets 使用.9图解决图片资源适配问题

2018-02-07 20:21 309 查看

背景

  通常,在适配不同屏幕尺寸的时候,使用.9图可以完美解决图片拉伸、压缩等问题;同时也可以避免不同尺寸用不同的png,无形中增加包体积大小。.9图的好处这里就不再赘述了。

  .9图的优势这么大,那是不是所有情况下都能直接使用呢?答案是否定的,.9图只能放在drawable路径下,才可以直接使用。

  本文将介绍如何在assets目录下使用.9图,以及在下发(图片由服务端返回url下载,适用于换肤等)的情况下使用.9图。

思路

用aapt 命令手动编译.9图

下发图片

从文件系统中加载.9图,转化成NinePatchDrawable使用

编译.9图

创建一个.9图的步骤以及.9的规则,本文就不赘述了。下面将告诉大家如何编译.9图,使用aapt命令:

aapt c -v -S 9_before -C 9_final

说明:
9_before--> 存放编译之前.9图的文件夹
9_final --> 存放编译之后.9图的文件夹
文件名可自定义

命令解释:
aapt c[runch] [-v] -S resource-sources ... -C output-folder ...
Do PNG preprocessing on one or several resource folders
And store the results in the output folder.


读取使用.9图

将.9图先获取到,然后转化成NinePatchDrawable即可使用。

/**
* @param context
* @param filePath 存放图片的位置
* @return
*/
public Drawable getImageFromFile(Context context, String filePath) {
if (context == null || TextUtils.isEmpty(filePath)) {
return null;
}

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
if (bitmap == null) {
return null;
}

Drawable defaultDrawable = null;
byte[] chunk = bitmap.getNinePatchChunk();

if (NinePatch.isNinePatchChunk(chunk)) {
NinePatchChunk npc = NinePatchChunk.deserialize(chunk);
if (null != npc) {
defaultDrawable = new NinePatchDrawable(context.getResources(), bitmap, chunk, npc.mPaddings, null);
}
} else {
defaultDrawable = new BitmapDrawable(context.getResources(), bitmap);
}
return defaultDrawable;
}


总结

.9图就是安卓用来适配不同屏幕分辨率用的,原来只会在drawable下面使用,通过本文,希望能运用到所有图片相关的情况下,用来解决Android的适配问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android .9图 图片适配
相关文章推荐