android 矢量图片使用方法,Android中的矢量图

概述

VectorDrawable是通过XML文件中的一系列点,线和曲线及其相关颜色信息定义的。 使用VectorDrawable的主要优点是图像可扩展性。 它可以缩放而不损耗显示质量,这意味着相同的文件被调整为不同的屏幕密度,而不会损耗图像质量。 从而得到较小的APK文件和较少的开发人员维护。 使用矢量图像可以进行动画,通过使用多个XML文件代替每个显示分辨率的多个图像。

让我们通过一个例子来了解好处。 尺寸为100×100dp的图像可以在较小的显示分辨率上呈现良好的质量。 在较大的设备上,应用可能需要使用400 x 400 dp版本的图片。 通常,开发人员创建资产的多个版本以适应不同的屏幕密度。 这种方法消耗更多的开发工作,并导致更大的APK,这需要更多的空间在设备上。

从Android 5.0(API级别21)开始,有两个类支持矢量图形作为可绘制资源:VectorDrawable和AnimatedVectorDrawable。 在Android 5.0(API级别21)之前,支持库23.2或更高版本提供对Vector Drawables和Animated Vector Drawables的全面支持。

注意:为了优化重绘图性能,为每个VectorDrawable创建一个位图缓存。 因此,引用相同的VectorDrawable意味着共享相同的位图缓存。 如果这些引用不同意相同的大小,在每次改变大小时位图将重新创建和重绘。 换句话说,如果VectorDrawable用于不同的大小,创建多个VectorDrawable更有效,每个大小一个。

关于 VectorDrawable 类

VectorDrawable定义了一个静态的drawable对象。 与SVG格式类似,每个矢量图形被定义为树的层次结构,它由path 和 group组成。 每个path包含对象轮廓的几何体,group包含转换的详细信息。 所有path的绘制顺序与XML文件中显示的顺序相同。

677da5076115

Sample hierarchy of a vector drawable asset

下面是一个VectorDrawable XML文件示例,在充电模式下呈现电池的图像。

android:height="24dp"

android:width="24dp"

android:viewportWidth="24.0"

android:viewportHeight="24.0">

android:name="rotationGroup"

android:pivotX="10.0"

android:pivotY="10.0"

android:rotation="15.0" >

android:name="vect"

android:fillColor="#FF000000"

android:pathData="M15.67,4H14V2h-4v2H8.33C7.6,4 7,4.6 7,5.33V9h4.93L13,7v2h4V5.33C17,4.6 16.4,4 15.67,4z"

android:fillAlpha=".3"/>

android:name="draw"

android:fillColor="#FF000000"

android:pathData="M13,12.5h2L11,20v-5.5H9L11.93,9H7v11.67C7,21.4 7.6,22 8.33,22h7.33c0.74,0 1.34,-0.6 1.34,-1.33V9h-4v3.5z"/>

此XML呈现以下图像:

677da5076115

vector、group、path和clip-path标签的相关属性如下所示:

vector 标签 --- 用于定义VectorDrawable

android:name

定义此VectorDrawable的名称。

Animatable : No.

android:width

用于定义drawable的固有宽度。 支持所有尺寸单位,通常使用dp指定。

Animatable : No.

android:height

用于定义drawable的固有高度。 支持所有尺寸单位,通常使用dp指定。

Animatable : No.

android:viewportWidth

用于定义viewport空间的宽度。 viewport是绘制paths路径数据的虚拟画布。

Animatable : No.

android:viewportHeight

用于定义viewport空间的高度。 viewport是绘制paths路径数据的虚拟画布。

Animatable : No.

android:tint

定义drawable 的 tint 颜色。默认是没有 tint 颜色的

Animatable : No.

android:tintMode

定义tint的 Porter-Duff blending 模式,默认值为 src_in

Animatable : No.

android:autoMirrored

指示当布局方向为RTL(从右到左)时,drawable是否需要被镜像。

Animatable : No.

android:alpha

drawable的不透明度。

Animatable : Yes.

group 标签 --- 定义一组paths 或 subgroups,以及transformation信息。

transformations是在与viewport相同的坐标中定义。 并且按照缩放,旋转,然后平移的顺序应用transformations。

android:name

定义group的名称。

Animatable : No.

android:rotation

group的旋转角度。

Animatable : Yes.

android:pivotX

group缩放和旋转时的X轴参考点。 是在viewport空间中定义的(即在vector标签的viewportWidth范围中取值)。

Animatable : Yes.

android:pivotY

group缩放和旋转时的Y轴参考点。 是在viewport空间中定义的(即在vector标签中viewportHeight范围中取值)。

Animatable : Yes.

android:scaleX

X坐标上的缩放倍数。

Animatable : Yes.

android:scaleY

Y坐标上的缩放倍数。

Animatable : Yes.

android:translateX

X坐标上的平移量。 是在viewport空间中定义的(即在vector标签的viewportWidth范围中取值)。

Animatable : Yes.

android:translateY

Y坐标上的平移量。 是在viewport空间中定义的(即在vector标签中viewportHeight范围中取值)。

Animatable : Yes.

path 标签 --- 定义要绘制的路径。

android:name

定义path的名称。

Animatable : No.

android:pathData

使用与SVG path data中的“d”属性完全相同的格式定义path data。 是在viewport空间中定义的(即使用vector标签中viewportWidth 、viewportHeight范围中的值定义path data)。

Animatable : Yes.

android:fillColor

指定用于填充path的颜色。 可能是color,或者对于SDK 24+的color state list或gradient color。 如果此属性是动画属性,动画设置的任何值都将覆盖原始值。 如果未指定此属性,则不绘制path填充。

Animatable : Yes.

android:strokeColor

指定用于绘制path轮廓的颜色。 可能是color,或者对于SDK 24+的color state list或gradient color。 如果此属性是动画属性,动画设置的任何值都将覆盖原始值。 如果未指定此属性,则不绘制path轮廓。

Animatable : Yes.

android:strokeWidth

定义路径轮廓的宽度。

Animatable : Yes.

android:strokeAlpha

路径轮廓的不透明度。

Animatable : Yes.

android:fillAlpha

填充路径的不透明度。

Animatable : Yes.

android:trimPathStart

从路径起始位置截断路径的比例,取值范围从0到1

Animatable : Yes.

android:trimPathEnd

从路径结束位置截断路径的比例,取值范围从0到1

Animatable : Yes.

android:trimPathOffset

设置路径截取的范围 Shift trim region (allows showed region to include the start and end), 取值范围从0到1

Animatable : Yes.

android:strokeLineCap

设置路径轮廓线帽的形状:butt,round,square。体呈现的效果可以参考下图

Animatable : No.

android:strokeLineJoin

设置路径轮廓交界处的连接方式:miter,round,bevel。具体呈现的效果可以参考下图

Animatable : No.

android:strokeMiterLimit

Sets the Miter limit for a stroked path. 用来限制miterLengh和strokeWidth之间的比例,

两条直线之间的角度是锐角时。 miterLength和storeWidth之间的比例可以大于storeMiterLimit。

在这种情况下,两条直线之间的交点的形状将从“Miter-Join”改变为“Bevel-Join”。

具体具体呈现的效果可以参考下图。

Animatable : No.

android:fillType

设置路径的fillType。 类型可以是“ evenOdd”或“ nonZero”。 它们的行为与SVG的“fill-rule”属性相同。 有关更多详细信息,请参考(https://www.w3.org/TR/SVG/painting.html#FillRuleProperty)

Animatable : No.

clip-path 标签 --- 定义当前修剪的路径。 请注意,clip-path仅适用于当前group及其子项。

android:name

定义clip path的名称。

Animatable : No.

android:pathData

使用与SVG path data中的“d”属性相同的格式定义clip-path数据。

Animatable : Yes.

677da5076115

strokeLineCap的三种取值

677da5076115

strokeLineJoin的三种取值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,Drawable是一种可绘制的像对象,可以用于绘制各种形状的像,如位矢量等。下面是使用Drawable图片的教程: 1. 创建Drawable资源文件 在Android Studio,可在res/drawable目录下创建Drawable资源文件,支持的文件格式包括PNG、JPG、GIF等。例如,创建一个名为ic_launcher的PNG图片文件,可在drawable目录下创建ic_launcher.png文件。 2. 在布局文件引用Drawable资源 在布局文件,可通过ImageView控件引用Drawable资源,例如: ``` <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/> ``` 其,@drawable/ic_launcher表示引用名为ic_launcher的Drawable资源。 3. 在代码引用Drawable资源 在代码,可通过Context的getDrawable()方法获取Drawable资源,例如: ``` Drawable drawable = context.getDrawable(R.drawable.ic_launcher); ``` 其,R.drawable.ic_launcher表示引用名为ic_launcher的Drawable资源的ID。 4. 设置Drawable图片的属性 Drawable图片可以设置不同的属性,例如透明度、边框、大小等。可通过代码方式设置Drawable图片的属性,例如: ``` Drawable drawable = context.getDrawable(R.drawable.ic_launcher); // 设置透明度为50% drawable.setAlpha(128); // 设置边框为红色,宽度为2dp drawable.setStroke(2, Color.RED); // 设置大小为50dp * 50dp drawable.setBounds(0, 0, 50, 50); ``` 以上是使用Drawable图片的教程,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值