Android开发中使用矢量图
Android开发中使⽤⽮量图
本⽂我们将介绍⼀些关于⽮量图的相关知识点。最新的项⽬中要求以⽮量图替代传统的.png资源⽂件,所以特意学习了⼀下Android中的⽮量图相关概念,不得不说⽮量图还是⼀个⽐较好的适配⽅案。Android从Android5.0开始引⼊了对⽮量图的⽀持,但是其并不⽀持svg这种⽮量图⽚格式,,⽽是以VectorDrawable的⽅式来实现⽮量图的效果。
Google官⽅关于⽮量图的相关说明:
下⾯我们将详细的介绍⼀下⽮量图的基本概念以及Android中对⽮量图的使⽤。
(⼀)什么是⽮量图
这⾥暂时引⽤⼀下百科中对⽮量图的定义:
⽮量图,也称为⾯向对象的图像或绘图图像,在数学上定义为⼀系列由线连接的点。⽮量⽂件中的图形元素称为对象。每个对象都是⼀个⾃成⼀体的实体,它具有颜⾊、形状、轮廓、⼤⼩和屏幕位置等属性。魔兽 烹饪
⽮量图是根据⼏何特性来绘制图形,⽮量可以是⼀个点或⼀条线,⽮量图只能靠软件⽣成,⽂件占⽤内
在空间较⼩,因为这种类型的图像⽂件包含独⽴的分离图像,可以⾃由⽆限制的重新组合。它的特点是放⼤后图像不会失真,和分辨率⽆关,适⽤于图形设计、⽂字设计和⼀些标志设计、版式设计等
可缩放⽮量图形是基于可扩展标记语⾔(标准通⽤标记语⾔的⼦集),⽤于描述⼆维⽮量图形的⼀种图形格式。它由万维⽹联盟制定,是⼀个开放标准,其简称为SVG,android中对⽮量图的⽀持就是对SVG的⽀持,其是推荐的⽮量图标准。
这⾥我就简单的引⽤W3C中对SVG⽮量图的介绍:
SVG 指可伸缩⽮量图形 (Scalable Vector Graphics)
SVG ⽤来定义⽤于⽹络的基于⽮量的图形,SVG 使⽤ XML 格式定义图形
SVG 图像在放⼤或改变尺⼨的情况下其图形质量不会有所损失
SVG 是万维⽹联盟的标准,SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是⼀个整体
简单来说SVG⽮量图就是⼀个使⽤XML标识图⽚格式的万维⽹联盟标准,更多关于SVG的相关说明:
(2)⽮量图有什么好处
我们都知道Android系统已经为我们提供了PNG,JPG,drawable,.9.path图⽚等,为什么⼜为我们提供了SVG⽮量图呢?
与其他图像格式相⽐,使⽤ SVG 的优势在于:
SVG 可被⾮常多的⼯具读取和修改(⽐如记事本)
SVG 与 JPEG 和 GIF 图像⽐起来,尺⼨更⼩,且可压缩性更强。
SVG 是可伸缩的,SVG 图像可在任何的分辨率下被⾼质量地打印
SVG 可在图像质量不下降的情况下被放⼤
SVG 图像中的⽂本是可选的,同时也是可搜索的(很适合制作地图)
江若琳走光照露卫生巾诛仙电视剧什么时候上映SVG 可以与技术⼀起运⾏,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
资源林俊杰的曹操
设置Asset Type ,选择SVG 资源,设置SVG
资源⼤⼩
在drawable ⽬录下⽣成vector
资源⽂件
(5)⽮量图标签的相关说明
可以发现我们⽣成的⽮量图资源⽂件其实是⼀个drawable⽂件:
这⾥的drawable资源⽂件的根节点是vector,我们都知道drawable中的节点都是对应着⼀个Java对象的,⽽vector是VectorDrawable对应的根标签,Android中⽮量图对应的Java对象就是VectorDrawable。
然后android:width与android:height对应⽮量图的实际⼤⼩,这⾥需要说明的是⽮量图是可以⽆限⼤, 但通常情况下⼀个图⽚都应该有⼀个原始⼤⼩, 假如你将此VectorDrawable作为⼀个ImageView的src,
ImageView的⼤⼩都设置为wrap_content, 则ImageView对应的实际⼤⼩就是这⾥设置的⼤⼩。
继续我们看⼀下android:viewportWidth与android:viewportHeight,它们是指当前Drawable对应的虚拟Canvas的⼤⼩, 之所以说是虚拟的是因为实际上并不存在这样⼀个Canvas, ⼜之所以需要这个值是因为在标签中的路径数据要基于具体的坐标系来绘制.
镀膜是什么
⽽标签对应路径信息, 这⾥的path与我们⾃定义绘制图形时⽤的Path原理⼀样, 就是记录⼀些绘图操作, 具体对应其中的
pathData.PathData中对应的路径描述符号不需要我们去记, 通常情况下由绘图软件⽣成svg图⽚再从svg⽂件中提取。
(6)如何在View中引⽤
添加⾃定义属性命名空间
在layout布局⽂件中的根节点添加xmlns:app的命名空间
在ImageView中设置src
可以发现这⾥使⽤的是srcCompat⽽⾮src属性
为View对象设置Backgraound
最后我们看⼀下它的展⽰效果:
(7)如何编写VectorDrawable资源⽂件
我们可以看到VectorDrawable资源⽂件的编写很复杂,那么我们如何编写VectorDrawable⽂件呢?其实编写VectorDrawable资源⽂件我们可以⾸先⽣成⼀个SVG⽂件,然后使⽤Android Studio的SVG⼯具⽣成VectorDrawable资源⽂件。具体步骤如下:
美⼯交付.svg⽂件
使⽤Android Studio加载本地.svg⽂件并⽣成VectorDrawable资源⽂件
⽣成最终的svg drawable资源⽂件
天津工业大学专科
总结:
以上就是在Android开发过程中使⽤⽮量图的相关知识,更多关于⽮量图的知识点可以参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。