Android 矢量图 vector

阿里矢量图标
可缩放向量图形Scalable Vector GraphicsSVG)是一种基于可扩展标记语言(XML),用于描述二维向量图形的图形格式。SVG由W3C制定,是一个开放标准。

  1. SVG何以可以任意缩放而不会失真,drawable-(m|h|xh|xxh|xxxh)dpi和mipmap-(m|h|xh|xxh|xxxh)dpi这俩货就可以省省了;

  2. SVG文件一般都比较小,省去很去资源达到apk缩包的目的;

  3. SVG占用内存非常小,性能高。但是SVG明显的缺点是没有位图表达的色彩丰富;
    Android API 21(5.0)引入了一个Drawable的子类VectorDrawable目的就是用来渲染矢图,AnimatedVectorDrawable用来播放矢量动画。之前老的小于21的API设备可以分别使用VectorDrawableCompatAnimatedVectorDrawableCompat这两个兼容包来同样达到渲染矢量图的目的。本文只讨论矢量图,不讨论矢量动画。

  4. minSdkVersion>=21:用xml文件或者代码定义VectorDrawable,和普通的Drawable用法一样,不再需要额外任何东西;如何编写矢量图,下文有介绍.

  5. minSdkVersion<21:如果想要渲染矢量图的话必须在app模块的build.gralde文件里添加一行代码

  6. minSdkVersion<21以及更多:上面的第二种情况是使用兼容包,但是兼容包仅支持AppCompatImageView和AppCompatImageButton及其子类矢量图,而且矢量图的引用必须放在app:srcCompat属性中才会被识别并生效,代码必须这样写才行:

<android.support.v7.widget.AppCompatImageView
      app:layout_constraintBottom_toBottomOf="parent"
      android:layout_width="100dp"
      android:layout_height="100dp"
      app:srcCompat="@drawable/ic_oval"/>

ic_oval.xml是我们使用xml编写的矢量图,如果想要TextView的drawableTop或者其他额外方式使用矢量图渲染,那么必须在Activity中加入代码:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

示例:

在drawable目录下新建drawable resource

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="200dp"
    android:height="200dp"
    android:alpha="1"
    android:name="@string/app_name"
    android:autoMirrored="true"
    android:viewportHeight="1024"
    android:viewportWidth="1024">

    <path
        android:pathData="M512 512m-448 0a448 448 0 1 0 896 0 448 448 0 1 0-896 0Z"
        android:fillColor="#FA5151" />
    <path
        android:pathData="M512 620c-17.7 0-32-14.3-32-32V300c0-17.7 14.3-32 32-32s32 14.3 32 32v288c0 17.7-14.3 32-32 32z"
        android:fillColor="#FFFFFF" />
    <path
        android:pathData="M512 718m-38 0a38 38 0 1 0 76 0 38 38 0 1 0-76 0Z"
        android:fillColor="#FFFFFF" />
</vector>

效果如下:在这里插入图片描述

标签:

<vector> 定义一个vector的drawable

android:name 命名vector

android:width 用来限定drawable的宽度,支持所有尺寸单位,通常使用dp

android:height用来限定drawable的高度,支持所有尺寸单位,通常使用dp

android:viewportWidth 用来定义视口的宽度,视口基本上是绘制路径的虚拟画布

android:viewportHeight 用来定义视口的高度,视口基本上是绘制路径的虚拟画布

android:tint 作为色调应用于可绘制对象的颜色。 默认情况下,不应用任何色调

android:tintMode 色调颜色的 Porter-Duff 混合模式。 默认为 src_in

android:autoMirrored代表当drawable的布局方向为RTL(从右到左)时是否需要对其进行镜像。 默认为false

android:alpha 这个drawable的不透明度。 默认值为 1.0(0代表透明,1代表不透明)。

<group> 定义一组路径或子组,以及转换信息。 转换在与视口相同的坐标中定义。 并按比例顺序应用变换,旋转然后平移。

android:name 命名group

android:ratation group的旋转角度默认0

android:pivotX 用于组缩放和旋转的枢轴的 X 坐标。 这是在视口空间中定义的。 默认值为 0。

android:pivotY 用于组缩放和旋转的枢轴的 Y 坐标。 这是在视口空间中定义的。 默认值为 0。

android:scaleX X 坐标上的缩放量。 默认值为 1。

android:scaleY Y 坐标上的缩放量。 默认值为 1。

android:translateX X 坐标上的平移量。 这是在视口空间中定义的。 默认值为 0。

android:translateY Y 坐标上的平移量。 这是在视口空间中定义的。 默认值为 0。
<path> 定义画的路径

android:name 命名path

android:pathData使用与 SVG 路径数据中的“d”属性完全相同的格式定义路径数据。 这是在视口空间中定义的。详细请参考参考

android:fillColor 指定用于填充路径的颜色。 可能是一种颜色,或者对于 SDK 24+ 来说,是一种颜色状态列表或 一种渐变颜色(参见 R.styleable.GradientColor 和 R.styleable.GradientColorItem)。 如果此属性是动画的,则动画 设置的任何值都将覆盖原始值。 如果未指定此属性,则不会绘制路径填充。

android:strokeColor 指定用于绘制路径轮廓的颜色。 可能是一种颜色,或者对于 SDK 24+ 来说,是一种颜色状态 列表或一种渐变颜色(参见 R.styleable.GradientColor 和 R.styleable.GradientColorItem)。 如果此属性是动画的, 则动画设置的任何值都将覆盖原始值。 如果未指定此属性,则不会绘制路径轮廓

android:strokeWidth 路径笔划的宽度。 默认为 0

android:strokeAlpha路径笔划的不透明度。 默认值为 1。

android:fillAlpha 填充路径的不透明度。 默认值为 1。

android:trimPathStart 从起点开始修剪的路径的分数,范围从 0 到 1。默认值为 0。

android:trimPathEnd 从末端修剪的路径的分数,范围从 0 到 1。默认为 1

android:trimPathOffset 移动修剪区域(允许显示区域包括开始和结束),范围从 0 到 1。默认值为 0。

android:strokeLineCap 设置描边路径的线帽:对接、圆形、方形。 默认是对接。

android:strokeLineJoin 设置描边路径的 lineJoin:斜接、圆形、斜角。 默认为斜接。

android:strokeMiterLimit 设置描边路径的斜接限制。 默认值为 4。

android:fillType 对于 SDK 24+,设置路径的 fillType。 类型可以是“偶数”或“非零”。 它们的行为与SVG 的“填充规则”属性相同。 默认值为非零。 有关更多详细信息,请参阅 FillRuleProperty
<clip-path> 将路径定义为当前剪辑。 请注意,剪辑路径仅适用于当前组及其子组。

android:name 命名 clip-path

android:pathData 使用与 SVG 路径数据中的“d”属性相同的格式定义剪辑路径。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值