你都知道么?Android中21种drawable标签大全(下)

简介: 我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape。目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大的帮助。这个文章我们对这21种标签做一个介绍,让大家有一个印象。本文中有些资料取自网上,当时记录在笔记中,但是由于时间久远,忘记出处了。

以下是android5.0新增标签


vector


svg矢量图


属性


android:name 名称

android:width Drawable宽度

android:height Drawable的高度

android:viewportWidth 定义矢量图形的视图(viewport)空间的宽度,viewport是一个虚拟的canvas,这不是drawable的宽度,是指这个坐标系横向最大的数值,即将drawable横向分成多少份。

android:viewportHeight 定义矢量图形的可视区域的高度。

android:tint 着色

android:tintMode 着色模式

android:autoMirrored 自动镜像,上面提到过

android:alpha 透明度,取值0~1


子标签:

group: 可以包含子group和path。它的属性:

  • android:name
  • android:rotation 旋转
  • android:pivotX 旋转和缩放时的中心点的X轴坐标。取值基于viewport视图的坐标系,不能使用百分比。
  • android:pivotY 旋转和缩放时的中心点的Y轴坐标。取值基于viewport视图的坐标系,不能使用百分比。
  • android:scaleX 在X轴上的缩放比例,最先应用到图形上。
  • android:scaleY 在Y轴上的缩放比例,最先应用到图形上。
  • android:translateX 在X轴的平移距离,取值基于viewport视图的坐标系。最后应用到图形上。
  • android:translateY 在Y轴的平移距离,取值基于viewport视图的坐标系。最后应用到图形上。

path:路径,它的属性:

  • android:name
  • android:pathData 路径的数据。主要属性,数据格式比较复杂,不在这细说了。
  • android:fillColor 填充路径的颜色,在SDK24及以上,可以指定一个颜色状态列表或者一个渐变的颜色。如果在此属性上做渐变动画,新的属性值会覆盖此值。
  • android:strokeColor 指定路径线条的颜色,在SDK24及以上,可以指定一个颜色状态列表或者一个渐变的颜色。如果在此属性上做渐变动画,新的属性值会覆盖此值。
  • android:strokeWidth 指定路径线条的宽度,基于viewport视图的坐标系
  • android:strokeAlpha 指定路径线条的透明度
  • android:fillAlpha 指定填充区域的透明度
  • android:trimPathStart 取值从0到1,表示路径从哪里开始绘制。0~trimPathStart区间的路径不会被绘制出来。
  • android:trimPathEnd 取值从0到1,表示路径绘制到哪里。trimPathEnd~1区间的路径不会被绘制出来。
  • android:trimPathOffset 平移可绘制区域,取值从0到1,线条从trimPathOffset+trimPathStart绘制到trimPathOffset+trimPathEnd,注意:trimPathOffset+trimPathEnd如果超过1,其实也是绘制的的,绘制的是0~trimPathOffset+trimPathEnd-1的位置。
  • android:strokeLineCap 设置线条首尾的外观,三个值:butt(默认,向线条的每个末端添加平直的边缘), round(向线条的每个末端添加圆形线帽), square(向线条的每个末端添加正方形线帽。)。
  • android:strokeLineJoin 设置当两条线条交汇时,创建什么样的边角(线段连接类型):三个值:miter(默认,创建尖角),round(创建圆角),bevel(创建斜角) 。
  • android:strokeMiterLimit 设置设置最大斜接长度,斜接长度指的是在两条线交汇处内角和外角之间的距离。只有当 lineJoin 属性为 “miter” 时,miterLimit 才有效。
  • android:fillType 设置路径的填充类型

clip-path: 只有在剪切路径内的才会显示出来,它的属性:

  • android:name
  • android:pathData 裁切路径,取值与上面讲的pathData相同。


animated-vector


svg矢量动画,需要配合动画xml(anim、animator)使用。

属性

android:drawable svg矢量图,即VectorDrawable

子标签:

target: 它的属性

  • android:name         vector中group或path的name
  • android:animation    group或path执行的动画,anim或animator
说明

举个列子简单来说一下,假设我们想让菜单icon(三条横线)变成后退icon(箭头)

首先我们要定义一个VectorDrawable,其中包含多条path或group,例子中是三个path,即三条横线。

然后需要定义几个anim或animator,例子中需要定义两个动画,分别是逆时针和顺时针旋转的动画

最好定义animated-vector,这样执行时可以看到上下两条横线旋转与中间横线交接,由菜单icon转成了后退icon。

这里注意,当我们使用animator直接改变pathData的时候,比如:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:propertyName="pathData"
    android:valueFrom="M20,20L80,20"
    android:valueTo="M50,20L80,50"
    android:valueType="pathType" />
复制代码

一定要将valueType显式设置为pathType,否则会crash,且没有crash日志。

另外经测试,在valueFrom和valueTo中的path格式要一一对应,否则也会crash,也没有日志,我的理解是因为无法计算出动画数据。

比如:

android:valueFrom="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"
android:valueTo="M4,0h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L0,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"
复制代码

这样就没问题,因为path的每小段的数据都是完全对应,只是每个小部分中的数值有变化

而:

android:valueFrom="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"
android:valueTo="M19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM9,17L7,17v-7h2v7zM13,17h-2L11,7h2v10zM17,17h-2v-4h2v4z"
复制代码

则会crash,因为path的数据完全对应不上,无法计算出动画的中间数据


ripple


水纹效果

属性

android:color   必填,水纹颜色

android:radius  响应半径

子标签

item:  如果不设置drawable属性,该标签下可以定义drawable类型的子标签

说明

item的drawable会一直显示作为背景,水纹则在其上面。

radius响应半径的意思是,以view的中心为圆心,以radius的值为半径的一个圆形区域,如果radius未设置则是view的所有区域。

当点击时,这个响应区域会填充颜色,同时产生水纹。但是水纹是以触碰点为圆心的,也就是说响应区域和水纹区域不重合。

但是如果触碰点在响应区域外,则水纹的圆心不会超出响应区域。


animated-selector


实现selector的动画,状态改变时会有一个动画效果。

属性

它是继承selector的,所以属性都一样

子标签

item: 与selector的item子标签一样。如果不设置drawable属性,该标签下可以定义drawable类型的子标签

transition: 它的属性:

  • android:fromId   开始item的id
  • android:toId       结束item的id

它的子标签:

  • animation-list     过渡的帧动画
说明

这里举个例子说一下:


<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/state_on"
        android:drawable="@drawable/btn_check_0"
        android:state_checked="false" />
    <item
        android:id="@+id/state_off"
        android:state_checked="true"
        android:drawable="@drawable/btn_check_15" />
    <transition
        android:fromId="@id/state_on"
        android:toId="@id/state_off">
        <animation-list> 
            <item
                android:drawable="@drawable/btn_check_0"
                android:duration="30" />
            ...
        </animation-list>
    </transition>
</animated-selector>
复制代码


可以看到在上面的例子中,实现了点击效果的动画,在非点击和点击两种状态转换时播放帧动画。这样可以实现不同状态间播放不同的动画。


adaptive-icon


自适应图标,必须在xxx-v26目录下,且其他版本目录中也要有对应资源,比如在mipmap-anydpi-v26中有一个adaptive-icon资源,在mipmap-xhdpi目录要有一个同名的png等资源。 否则在其他目录下直接使用这个标签会crash,其他版本目录中没有对应资源也会crash。

属性

android:drawable

子标签

foreground  前景,如果不设置drawable属性,该标签下可以定义drawable类型的子标签

background  背景,如果不设置drawable属性,该标签下可以定义drawable类型的子标签

这两个标签还有一些设置位置的属性,比较简单,不一一介绍了


maskable-icon


据了解,被adaptive-icon替代了,完全一样

属性

android:drawable

子标签

foreground

background


drawable


api>=24

只有一个属性class,值是类的全名,如android.graphics.drawable.ColorDrawable,否则会提示找不到类

这个标签没有找到文档,猜测是将一个自定义的drawable的java类转成xml资源



目录
相关文章
|
3月前
|
XML 编解码 Android开发
Android各种各样的Drawable-更新中
Android各种各样的Drawable-更新中
57 0
|
4月前
|
Android开发
[Android]Layer Drawable
[Android]Layer Drawable
24 0
|
4月前
|
Android开发
[Android]Shape Drawable
[Android]Shape Drawable
42 0
|
4月前
|
XML Android开发 数据格式
[Android]Bitmap Drawable
[Android]Bitmap Drawable
29 0
|
4月前
|
XML Java Android开发
Android Studio App开发中工具栏Toolbar、溢出菜单OverflowMenu、标签布局TabLayout的讲解及实战(实现京东App的标签导航栏,附源码)
Android Studio App开发中工具栏Toolbar、溢出菜单OverflowMenu、标签布局TabLayout的讲解及实战(实现京东App的标签导航栏,附源码)
59 0
|
4月前
|
XML 编解码 Android开发
Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)
Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)
48 1
|
8月前
|
Android开发
Android 获取include标签中的控件属性并设置事件
Android 获取include标签中的控件属性并设置事件
138 0
|
8月前
|
Android开发
Android 通过Vector Drawable绘制心形
Android 通过Vector Drawable绘制心形
54 0
|
8月前
|
XML Android开发 数据格式
Android drawable 与 mipmap 文件夹存放图片有区别
Android drawable 与 mipmap 文件夹存放图片有区别
60 0
|
9月前
|
XML 编解码 API