Google官方关于矢量图的相关说明:VectorDrawable相关说明
下面我们将详细的介绍一下矢量图的基本概念以及Android中对矢量图的使用。
(一)什么是矢量图
这里暂时引用一下百科中对矢量图的定义:
矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。
矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内在空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和分辨率无关,适用于图形设计、文字设计和一些标志设计、版式设计等
可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式。它由万维 联盟制定,是一个开放标准,其简称为SVG,android中对矢量图的支持就是对SVG的支持,其是W3C组织推荐的矢量图标准。
这里我就简单的引用W3C中对SVG矢量图的介绍:
-
SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
-
SVG 用来定义用于 络的基于矢量的图形,SVG 使用 XML 格式定义图形
-
SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
-
SVG 是万维 联盟的标准,SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
简单来说SVG矢量图就是一个使用XML标识图片格式的万维 联盟标准,更多关于SVG的相关说明:SVG简介
(2)矢量图有什么好处
我们都知道Android系统已经为我们提供了PNG,JPG,drawable,.9.path图片等,为什么又为我们提供了SVG矢量图呢p>
与其他图像格式相比,使用 SVG 的优势在于:
-
SVG 可被非常多的工具读取和修改(比如记事本)
-
SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
-
SVG 是可伸缩的,SVG 图像可在任何的分辨率下被高质量地打印
-
SVG 可在图像质量不下降的情况下被放大
-
SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
-
SVG 可以与 Java 技术一起运行,SVG 文件是纯粹的 XML
矢量图在实现的时候图片质量不会下降,下面具体我们可以看一下一个简单的例子:
然后我们看一下实现的效果:
可以发现当图片显示变大时图片也没有失真的情况,显示的情况还是和100dp的时候是相似的,而且我们也没有保存多分drawable图片资源,这样使用矢量图代替资源文件的话还可以减小我们的apk文件大小等。
(3)开发过程中如何使用矢量图替换Png Icon
这里以Android Studio为例,假如我们需要在低版本上使用矢量图,需要在项目中引入新的兼容库support-vector-drawable,并且appcompat-v7库的版本要在23.2.0+。而且你还要修改下gradle的相关配置,不要让gradle在构建的时候为你在低版本(API21以下)的情况下生成针对于不同密度的png文件,因为android studio1.4的时候支持了矢量图。
- 如果你的gradle插件的版本为2.0以下,你应该这么修改
如果你的gradle插件版本是2.0+,你 应该这么修改
经过上面的设置之后我们就可以在我们的Android项目中使用矢量图了。
(4)使用Android Studio创建矢量图资源
- 右键res目录创建Vector Asset资源
- 在drawable目录下生成vector资源文件
(7)如何编写VectorDrawable资源文件
我们可以看到VectorDrawable资源文件的编写很复杂,那么我们如何编写VectorDrawable文件呢编写VectorDrawable资源文件我们可以首先生成一个SVG文件,然后使用Android Studio的SVG工具生成VectorDrawable资源文件。具体步骤如下:
-
美工交付.svg文件
-
使用Android Studio加载本地.svg文件并生成VectorDrawable资源文件
-
生成最终的svg drawable资源文件

总结:
以上就是在Android开发过程中使用矢量图的相关知识,更多关于矢量图的知识点可以参考:
Android的矢量图支持 – VectorDrawable
如何玩转Android矢量图VectorDrawable
Android中使用SVG矢量图
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!