美文网首页在西电求学的那些日子编程
android矢量图使用及踩坑记录

android矢量图使用及踩坑记录

作者: 子天666 | 来源:发表于2019-01-10 17:58 被阅读2次

    一、由于png、jpg图片占用内存大,所以从android5.0开始支持一种全新的矢量图,svg格式的图。这种图优势大,占用内存小,且缩放后依旧清晰。那么如何使用呢?

    二、设计一般会给出png及svg格式的两种图,如果用png格式的话,建议先用tinyPng进行压缩后再使用,一般使用一套就可以了,不用每个分辨率下都放一套图片。svg格式的图就是矢量图,导入as中是以xml文件形式存在的。导入步骤如下:

         右键点击drawable文件夹 ---> 点击new ---> 点击Vector Asset ---> 出现下图所示:

    选择Local file,Name处为自己对这个xml文件的命名,Path为本地路径,即svg图片所在的位置。如果选择Override的话,则其Size默认大小为svg本身的大小,也可以进行按需更改。选择Enable的话,则该矢量图会在RTL布局中自动镜像。设置好后,点击Next ---> 进入下个页面后点击finsih即建好了一个矢量图。示例:

    <vector xmlns:android="http://schemas.android.com/apk/res/android"

            android:width="14dp"

            android:height="14dp"

            android:viewportWidth="14.0"

            android:viewportHeight="14.0">

        <path

            android:pathData="M2.151,0.535L13.465,11.849A1.143,1.143 112.734,0 1,13.465 13.465L13.465,13.465A1.143,1.143 112.734,0 1,11.849 13.465L0.535,2.151A1.143,1.143 117.322,0 1,0.535 0.535L0.535,0.535A1.143,1.143 117.322,0 1,2.151 0.535z"

            android:fillType="evenOdd"

            android:fillColor="#B9C0C7"/>

        <path

            android:pathData="M13.465,2.151L2.151,13.465A1.143,1.143 112.257,0 1,0.535 13.465L0.535,13.465A1.143,1.143 112.257,0 1,0.535 11.849L11.849,0.535A1.143,1.143 69.355,0 1,13.465 0.535L13.465,0.535A1.143,1.143 69.355,0 1,13.465 2.151z"

            android:fillType="evenOdd"

            android:fillColor="#B9C0C7"/>

    </vector>

    即为一个矢量图。

    三、导入矢量图后如何使用呢?如果gradle版本比较低,可以直接使用,而不需要配置。只是,这时在高版本的android中矢量图依旧为矢量图,但在低版本中,矢量图会转化为各个分辨率下的png图片。所以,最好进行如下配置:

    //在gradle2.0及以上:

    android {

      defaultConfig {

      vectorDrawables.useSupportLibrary = true

    }}

    //在gradle 1.5以前

    android {

      defaultConfig {

        // Stops the Gradle plugin’s automatic rasterization of vectors

        generatedDensities = []

      }

      // Flag to tell aapt to keep the attribute ids around

      aaptOptions {

        additionalParameters "--no-version-vectors"

      }

    }

    然后,在Application中设置:

    if (Build.VERSION.SDK_INT < BuildInfo.LOLLIPOP) {

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); //支持SVG

    }

    四、如果所有的Activity继承的是AppCompatActivity的话,不会有问题。但如果继承的是Activity,而且因为业务需求不可更改或者更改起来改动太大,这时,坑就来了。什么坑呢?比如,ImageView中setImageResource的是矢量图,这时不会显示出来任何图片。如何更改?把ImageView换为AppCompatImageView即可,这是最简单的改法。还可以把矢量图放到selector中,也可以在createview的时候进行拦截,把ImageView转为AppCompatImageView。

    相关文章

      网友评论

        本文标题:android矢量图使用及踩坑记录

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