1.背景
在安卓程序中如下截图所示中,在drawable文件夹下有如下图片文件。
这是一个xml文件,打开后看到Vector节点下paht中有一个pathData属性有一串带字母数字和"."点的数据。这些是什么呢?
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="#FF000000" android:pathData="M17.6,11.48 L19.44,8.3a0.63,0.63 0,0 0,-1.09 -0.63l-1.88,3.24a11.43,11.43 0,0 0,-8.94 0L5.65,7.67a0.63,0.63 0,0 0,-1.09 0.63L6.4,11.48A10.81,10.81 0,0 0,1 20L23,20A10.81,10.81 0,0 0,17.6 11.48ZM7,17.25A1.25,1.25 0,1 1,8.25 16,1.25 1.25,0 0,1 7,17.25ZM17,17.25A1.25,1.25 0,1 1,18.25 16,1.25 1.25,0 0,1 17,17.25Z"/>
</vector>
查了下,原来是Vector矢量图。联想到WPF中使用到的iconfont,这两者有什么关联呢?于是就查了下资料,于是有了这篇文章,暂且记录一下。
2.概念
在概念上,WPF中的图标字体和Android中的矢量图(Vector)具有相似的特性,它们都可以用于实现可缩放的图标和图形。
1.1WPF中的图标字体(Icon Fonts)
在WPF中,可以使用图标字体(如Font Awesome等)来显示图标。这些字体文件包含了各种图标,每个图标都对应字体中的一个字符。通过在XAML中指定字体家族和字符,可以轻松地将图标显示在应用程序中,并且可以通过修改字体大小来实现缩放。这种方式实际上是将字形用作图形的一种方法。
1.2Android中的矢量图(Vector)
Android中,矢量图是一种基于路径描述的图形格式。使用XML文件来定义图形的形状、颜色和其他属性。与图标字体相比,矢量图更加灵活,因为可以直接控制图形的各个部分,而不仅仅是整体的缩放。
3.不同点
Icon Fonts 和 Vector 图标在概念上相似,但在实现方式和特性上存在一些不同:
2.1实现方式
- Icon Fonts: Icon Fonts 实际上是一种字体文件,其中每个字符都代表一个特定的图标。这些字体文件通常使用图标而不是字母或数字填充字符集。在应用程序中,可以通过指定特定字符来显示相应的图标。
- Vector 图标: Vector 图标是以矢量图形的形式存储的,通常使用 XML 或其他矢量图形格式来描述图标的形状、颜色和其他属性。这些描述是基于路径的,可以通过编辑路径来修改图标的外观。
2.2灵活性
- Icon Fonts: Icon Fonts 提供了一组预定义的图标,每个图标都对应于字体文件中的一个字符。因此,它们的灵活性较低,通常只能修改整个图标的大小,而无法对图标的每个部分进行单独控制。
- Vector 图标: Vector 图标的灵活性更高,因为它们是基于路径描述的。可以直接编辑路径来修改图标的形状、颜色和其他属性。这使得 Vector 图标更适合需要更多定制化和复杂图形的情况。
2.3性能和兼容性
- Icon Fonts: 由于 Icon Fonts 实际上是字体文件,因此它们具有良好的跨浏览器和跨平台兼容性,并且在大多数现代浏览器中都能很好地工作。
- Vector 图标: 在一些旧版本的浏览器或平台上,对于某些 Vector 图标格式(如 SVG)的支持可能不够完善。此外,由于 Vector 图标通常包含较复杂的路径描述,因此在某些情况下可能会影响性能。
总结:
在概念上,WPF中的图标字体和Android中的矢量图(Vector)具有相似的特性,它们都可以用于实现可缩放的图标和图形。但是,它们的实现方式略有不同。