Android如何从网络获取.9图片

作者: levinandroid | 来源:发表于2017-08-03 19:47 被阅读330次

    问题简述:

    最近项目做了聊天气泡的需求,要求能够购买聊天气泡,也就是说要从服务器上获取气泡图。聊天气泡图一般使用.9的方式实现,但是在调试过程中发现,从服务器上获取.9图片的话,.9图片会失效,气泡会被拉伸。在查找一些文档后发现,.9图不能直接放到服务器上,必须经过Android的工具编译,然后下载图片后需要用NinePatchDrawable类重新处理后才生效。

    解决步骤:

    1、编译.9图片

    在拿到.9图后,我们可以看到.9图四周会存在黑边,这个时候我们需要先编译.9图,有如下两种方式:

    1.比较笨的一种方式:打包apk再解压

    1)将画好线的.9图放在任意一个Android工程中

    2)从Android工程bin目录下拷贝apk

    3)将apk后缀名修改为zip等可解压的文件,并对其解压

    4)解压后你会发现,对应的res文件夹下有我们之前放的.9图片

    2.通过android build tools aapt

    该工具伟大的Google已经提供,就在sdk/build-tools/xxx目录下(Windows环境下,步骤):

    1、cd到自己的sdk/build-tools/xxx目录下,如我的:D:\SDK5.0\build-tools\25.0.2 可以看到里面有个文件是aapt.exe

    2、准备好你要编译的图片文件,最好将所有要编译的图片都放到一个文件夹下,如我的放在D:\chatbg目录下,该目录下有一张.9图“chat_bg.9.png”

    3、创建一个你要存放目标文件的目录,例如D:\chatbgbuild (实践证明,这个文件夹必须在运行编译之前创建好,否则会报错)

    4、编译:aapt.exe c -v -S D:\chatbg -C D:\chatbgbuild
    之后便可以看到chatbg中的需要编译的图片都编译到chatbgbuild中了,而且大小尺寸都有改变

    2、代码处理

    将编译过后的图片放到服务器后,下载图片,然后设置setBackgroundDrawable的方式直接设置背景,背景还是被拉伸了,这里需要用NinePatchDrawable类处理一下图片:

    private Drawable getNinePatchDrawable(Bitmap bitmap,Context context) {
       
            byte[] chunk =bitmap.getNinePatchChunk();
            NinePatchDrawable ninePatchDrawable = null;
            if(NinePatch.isNinePatchChunk(chunk)){
                ninePatchDrawable = new NinePatchDrawable(context.getResources(), bitmap, chunk,
                        new Rect(), null);
            }
            return ninePatchDrawable;
            
            
    private Drawable getNinePatchDrawable(File file, Context context) {
            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
            byte[] chunk = bitmap.getNinePatchChunk();
            NinePatchDrawable ninePatchDrawable = null;
            if (NinePatch.isNinePatchChunk(chunk)) {
                ninePatchDrawable = new NinePatchDrawable(context.getResources(), bitmap, chunk,
                        new Rect(), null);
            }
            return ninePatchDrawable;
        }
    

    3、补充说明:

    1、经过这两步处理后,气泡背景图不会被拉伸,但是.9的右线和底线的文字显示区域设置还是无效,不过我们可以通过设置padding来解决:

    view.setPadding(leftPadding,topPadding,rightPadding,bottomPadding)
    

    2、Android编译过后的气泡图IOS不能用,所以IOS平台跟Android平台的图片资源后台需要分开处理,不能用统一的图片。

    相关文章

      网友评论

        本文标题:Android如何从网络获取.9图片

        本文链接:https://www.haomeiwen.com/subject/wauplxtx.html