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

本文介绍如何在Android的assets目录下使用.9图,并探讨如何在动态下发图片时利用.9图进行适配。文章提供了aapt命令编译.9图的方法及示例代码,帮助开发者更好地应对不同屏幕尺寸的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

  通常,在适配不同屏幕尺寸的时候,使用.9图可以完美解决图片拉伸、压缩等问题;同时也可以避免不同尺寸用不同的png,无形中增加包体积大小。.9图的好处这里就不再赘述了。
  .9图的优势这么大,那是不是所有情况下都能直接使用呢?答案是否定的,.9图只能放在drawable路径下,才可以直接使用。
  本文将介绍如何在assets目录下使用.9图,以及在下发(图片由服务端返回url下载,适用于换肤等)的情况下使用.9图。

思路

  1. 用aapt 命令手动编译.9图
  2. 下发图片
  3. 从文件系统中加载.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的适配问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值