安卓矢量图是Android平台提供的矢量图形资源类型,通过xml文件定义图形的路径、颜色、大小等属性,能够在不同屏幕密度下无损缩放,解决传统位图的适配和包体积问题。

为什么安卓矢量图要用xml定义
安卓选择用xml格式定义矢量图,主要基于以下几个核心原因:
- 无损缩放适配:xml定义的矢量图通过数学路径描述图形,在不同屏幕密度下缩放时不会出现模糊、锯齿等问题,不需要像位图那样为不同dpi准备多套资源,大幅减少资源文件数量。
- 减小包体积:简单的矢量图形用xml描述的体积远小于对应的多套位图资源,尤其是图标类资源,能有效降低应用安装包的大小。
- 动态修改属性:xml格式的矢量图可以在代码中动态修改颜色、大小、透明度等属性,不需要替换整个资源文件,灵活性更高。
- 系统原生支持:Android系统内置了对Vector Drawable的解析逻辑,能够直接将xml转换为对应的图形渲染,不需要额外的第三方库依赖。
Android Vector Drawable基础语法
一个标准的Vector Drawable xml文件根标签是<vector>,内部包含图形的路径、群组等定义,基础结构如下:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z" />
</vector>
下面解析各个核心属性的作用:
| 属性名 | 作用说明 |
|---|---|
| android:width / android:height | 定义矢量图的固有宽高,通常是dp单位,决定默认显示大小 |
| android:viewportWidth / android:viewportHeight | 定义矢量图的坐标系宽高,pathData的路径坐标基于这个坐标系计算 |
| android:pathData | 定义矢量图的路径数据,使用SVG路径语法描述图形的形状 |
| android:fillColor | 定义路径的填充颜色,支持十六进制颜色值和系统颜色引用 |
Vector Drawable常用进阶特性
群组与变换
如果需要多个路径共享变换效果,可以使用<group>标签包裹多个<path>,对群组设置旋转、缩放、平移等变换:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<group
android:rotation="45"
android:pivotX="12"
android:pivotY="12">
<path
android:fillColor="#FF000000"
android:pathData="M12,2L22,22L2,22Z" />
</group>
</vector>
动态修改属性
在代码中可以获取Vector Drawable实例,动态修改其属性,比如修改填充颜色:
// 获取Vector Drawable
Drawable drawable = getResources().getDrawable(R.drawable.ic_vector_demo);
if (drawable instanceof VectorDrawable) {
VectorDrawable vectorDrawable = (VectorDrawable) drawable;
// 修改颜色,需要配合tint属性或者自定义drawable状态
vectorDrawable.setTint(ContextCompat.getColor(this, R.color.new_color));
}
使用注意事项
- 复杂图形不建议使用Vector Drawable,因为路径数据过长会导致xml文件体积增大,解析耗时也会增加,适合图标、简单形状等场景。
- Android 5.0以下系统默认不支持Vector Drawable,需要添加兼容支持库,或者在gradle中配置矢量图兼容选项。
- pathData的语法和SVG路径语法一致,如果需要生成复杂的矢量图,可以先使用SVG工具绘制,再转换为Vector Drawable格式。
矢量图的核心优势在于用数学描述图形,因此缩放不会失真,xml格式刚好适合存储这类结构化的路径和属性信息,这也是安卓选择xml作为矢量图定义格式的核心原因。
Android_Vector_Drawablexml矢量图安卓适配修改时间:2026-07-18 10:06:24