因为svg有着能够动态缩放而不影响图片质量的特性,因此项目中只须要导入一张图片就能够代替以前的多张png图片了,能够减小apk体积。今天给你们分享一下我本身项目中的svg使用经验,但愿能对你们有所帮助。android
选中drawable文件夹,右键->New->Vector Asset面试
接下来给图片取一个名字,在path中选择好图片在本地的路径,点击Next便可。这里勾选Override表明自定义图片大小,使用16 * 16的大小,固然也能够取消勾选,取消后就是原图默认大小,且修改框会被置灰不可点击。安全
接下来点击Finish就能够了app
和使用png相似,能够在xml布局中使用app:srcCompat="@drawable/图片名"的方式,而不是android:src的方式,这里和使用png略有不一样。ide
也能够在代码中经过setImageResource(R.drawable.图片名)的方式使用svg
咱们常用TextView中drawableLeft的方式来实现一些最简单的图文混排效果,可是若是该图片是svg的,在5.0以上是没问题的,可是在4.x会直接crash。布局
报错日志以下:测试
咱们自定义view时,若是设置了图片类型的自定义参数,而后尝试获取,代码以下:3d
若是图片是svg时,在4.x手机上则会直接crash,报找不到svg图片。这个问题是上线前一天才发现的,真是吓出了一身冷汗,如今想来都有点惧怕。。。日志
解决方案是先try...catch尝试获取,若是获取不到再尝试使用反射进行获取
4.x手机通常使用反射都能获取到,可是我为了更加地安全,在使用这个id时还进行了判空,若是依然没有获取到,就使用默认的图片
用AS导入svg图片时,若是这个图片有阴影效果,则导入时AS会提示错误。可是若是你坚持使用仍是能够导入成功的,只不过使用之后那些阴影效果就没有了。
有部分svg使用起来挺好的,可是在实际测试时,部分手机上没报错,可是显示的图片不正常。以下图,原本这个消息图片里是一个笑脸的,可是最终只显示了一只眼睛
通过和UI小姐姐360度全方面沟通,原来是这一块并未使用矢量图,后面UI小姐姐从新画了个图就解决了
svg还有一些其余的技巧,好比能够在使用时经过tint属性来动态修改图片颜色,因此若是形状同样可是背景颜色不同的图片也只须要导入一张便可。可是svg是一把双刃剑,有利也有弊,减小apk大小的同时也会带来不少的兼容性问题,特别是在没有svg经验初步使用的时候,必定要作好4.x手机的兼容性工做。建议使用时按部就班,不要一次性把项目里的icon图都换成svg,先在不重要的页面试试点,万一出问题能够下降影响。另外svg图片不能太大,通常只考虑200 * 200之内的。也不能支持很丰富的颜色,因此只能是做为一些icon小图片来使用。