前言

drawable 即可绘制对象资源,Android支持以下几种类型:

  1. Bitmap File :位图,包括了常用的.png、.jpg、.gif文件
  2. Nine-Patch File:就是我们常说的点九图(.9.png)
  3. Layer List :图层列表
  4. State List:状态列表,常见的Selector
  5. Level List:级别列表
  6. Transition Drawable :转换可绘制对象
  7. Inset Drawable:插入可绘制对象
  8. Clip Drawable:裁剪可绘制对象
  9. Scale Drawable:缩放可绘制对象
  10. Shap Drawable:形状可绘制对象

Bitmap File

Android 支持以下三种格式的位图文件:.png(首选).jpg(可接受).gif(不建议使用)。

NinePatch File

NinePatch 是一种 PNG 图像,在其中可定义当视图中的内容超出正常图像边界时 Android 缩放的可拉伸区域。此类图像通常指定为至少有一个尺寸设置为 "wrap_content"的视图的背景,而且当视图扩展以适应内容时,.9图也会扩展以匹配视图的大小。Android 的标准Button小部件使用的背景就是典型的九宫格图像,其必须拉伸以适应按钮内的文本(或图像)。
与普通位图一样,可以直接引用,也可以从 XML 定义的资源引用。

Layer List

Layer List 是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象按照列表的顺序绘制,层叠其上,列表中的最后一个可绘制对象绘于顶部。

<?xml version="1.0" encoding="utf-8"?>                                          

使用方法:通过src属性引入。

可以看到上面的代码引入了3个 ,层叠其中,并通过控制分层,并它们的偏移量产生层叠效果。

layers.png

State List

StateListDrawable 是在 XML 中定义的可绘制对象,它根据对象的状态,使用多个不同的图像来表示同一个图形。例如,Button 小部件可以是多种不同状态(按下、聚焦或这两种状态都不是)中的其中一种,而且可以利用状态列表可绘制对象为每种状态提供不同的背景图片。
可以在 XML 文件中描述状态列表。每个图形由单一 元素内的 元素表示。每个 均使用各种属性来描述应用作可绘制对象的图形的状态。
在每个状态变更期间,将从上到下遍历状态列表,并使用第一个与当前状态匹配的项目 —此选择并非**基于“最佳匹配”,而是选择符合状态最低条件的第一个项目。

语法:详细说明

<?xml version="1.0" encoding="utf-8"?>    

一个点击与聚焦与光标悬停的栗子(用在显示点击效果的View中)

<?xml version="1.0" encoding="utf-8"?>                    

引入方式:

一个选中、对象启用(能够接收触摸/点击事件)、当应用窗口有焦点(应用在前台)的栗子(用在我的RadioButton自定义底部导航栏上)
使用方法:通过background属性引入。

<?xml version="1.0" encoding="utf-8"?>                

引入方式:

Level List

管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量。使用 setLevel() 设置可绘制对象的级别值会加载级别列表中 android:maxLevel 值大于或等于传递到方法的值的可绘制对象资源。

Transition Drawable

Transition Drawable是可在两种可绘制对象资源之间交错淡出的可绘制对象。

Inset Drawable

在 XML 文件中定义的以指定距离插入其他可绘制对象的可绘制对象。

Clip Drawable

在 XML 文件中定义的对其他可绘制对象进行裁剪(根据其当前级别)的可绘制对象。您可以根据级别以及用于控制其在整个容器中位置的重力,来控制子可绘制对象的裁剪宽度和高度。通常用于实现进度栏之类的项目。

Scale Drawable

在 XML 文件中定义的更改其他可绘制对象大小(根据其当前级别)的可绘制对象。

Shap Drawable

这是比较常用的一个在 XML 中定义一般形状的Drawable

语法:

<?xml version="1.0" encoding="utf-8"?>                        

属性:
android:shape 关键字。定义形状的类型。有效值为:

  • "rectangle" 填充包含视图的矩形。这是默认形状。

  • "oval" 适应包含视图尺寸的椭圆形状。

  • "line" 跨越包含视图宽度的水平线。此形状需要 元素定义线宽。

  • "ring" 环形。
    仅当 android:shape="ring" 如下时才使用以下属性:

    android:innerRadius
    尺寸。环内部(中间的孔)的半径,以尺寸值或尺寸资源表示。
    android:innerRadiusRatio
    浮点型。环内部的半径,以环宽度的比率表示。例如,如果 android:innerRadiusRatio="5",则内半径等于环宽度除以 5。此值被 android:innerRadius 覆盖。默认值为 9。
    android:thickness
    尺寸。环的厚度,以尺寸值或尺寸资源表示。
    android:thicknessRatio
    浮点型。环的厚度,表示为环宽度的比率。例如,如果 android:thicknessRatio="2",则厚度等于环宽度除以 2。此值被 android:innerRadius 覆盖。默认值为 3。
    android:useLevel
    布尔值。如果这用作 LevelListDrawable,则此值为“true”。这通常应为“false”,否则形状不会显示。


为形状产生圆角。仅当形状为矩形时适用。

属性:
android:radius
尺寸。所有角的半径,以尺寸值或尺寸资源表示。对于每个角,这会被以下属性覆盖。
android:topLeftRadius
尺寸。左上角的半径,以尺寸值或尺寸资源表示。
android:topRightRadius
尺寸。右上角的半径,以尺寸值或尺寸资源表示。
android:bottomLeftRadius
尺寸。左下角的半径,以尺寸值或尺寸资源表示。
android:bottomRightRadius
尺寸。右下角的半径,以尺寸值或尺寸资源表示。
注:(最初)必须为每个角提供大于 1 的角半径,否则无法产生圆角。如果希望特定角不要倒圆角,解决方法是使用 android:radius 设置大于 1 的默认角半径,然后使用实际所需的值替换每个角,为不希望倒圆角的角提供零(“0dp”)。


指定形状的渐变颜色。

属性:
android:angle
整型。渐变的角度(度)。0 为从左到右,90 为从上到上。必须是 45 的倍数。默认值为 0。
android:centerX
浮点型。渐变中心的相对 X 轴位置 (0 - 1.0)。
android:centerY
浮点型。渐变中心的相对 Y 轴位置 (0 - 1.0)。
android:centerColor
颜色。起始颜色与结束颜色之间的可选颜色,以十六进制值或颜色资源表示。
android:endColor
颜色。结束颜色,表示为十六进制值或颜色资源。
android:gradientRadius
浮点型。渐变的半径。仅在 android:type="radial" 时适用。
android:startColor
颜色。起始颜色,表示为十六进制值或颜色资源。
android:type
关键字。要应用的渐变图案的类型。有效值为:
值 说明
"linear" 线性渐变。这是默认值。
"radial" 径向渐变。起始颜色为中心颜色。
"sweep" 流线型渐变。
android:useLevel
布尔值。如果这用作 LevelListDrawable,则此值为“true”。


要应用到包含视图元素的内边距(这会填充视图内容的位置,而非形状)。

属性:
android:left
尺寸。左内边距,表示为尺寸值或尺寸资源
android:top
尺寸。上内边距,表示为尺寸值或尺寸资源
android:right
尺寸。右内边距,表示为尺寸值或尺寸资源
android:bottom
尺寸。下内边距,表示为尺寸值或尺寸资源


形状的大小。

属性:
android:height
尺寸。形状的高度,表示为尺寸值或尺寸资源
android:width
尺寸。形状的宽度,表示为尺寸值或尺寸资源
注:默认情况下,形状按照此处定义的尺寸按比例缩放至容器视图的大小。在 ImageView 中使用形状时,可通过将 android:scaleType 设置为 "center" 来限制缩放。


用于填充形状的纯色。

属性:
android:color
颜色。应用于形状的颜色,以十六进制值或颜色资源表示。


形状的笔划中线。

属性:
android:width
尺寸。线宽,以尺寸值或尺寸资源表示。
android:color
颜色。线的颜色,表示为十六进制值或颜色资源。
android:dashGap
尺寸。短划线的间距,以尺寸值或尺寸资源表示。仅在设置了 android:dashWidth 时有效。
android:dashWidth
尺寸。每个短划线的大小,以尺寸值或尺寸资源表示。仅在设置了 android:dashGap 时有效。

示例代码:

<?xml version="1.0" encoding="utf-8"?>            

引用方式:在background属性中引入:

以上重点介绍了常用的几种Drawable类型,日常使用时复制过来稍加修改即可,这大概是这篇文章的价值所在把。

参考资料

Android样式的开发
可绘制对象资源 | Android Developers

更多相关文章

  1. Android的HTTP协议
  2. Android(安卓)Service的两种启动方式,你知道吗?
  3. Android的Window底层原理
  4. Android(安卓)listView+CheckBox的实现
  5. Json数据解析
  6. Android(安卓)解屏幕锁与点亮屏幕
  7. 运用开源 achartengine 绘制android端的折线图片,多表显示
  8. Android(安卓)Canvas drawArc方法介绍
  9. 仿抖音短视频APP源码,android获取屏幕尺寸,像素

随机推荐

  1. 即时配送的订单分配策略:从建模和优化
  2. 客户端自动化测试研究
  3. 【直播】美团点评技术沙龙Online005: 臧
  4. 函数式编程在Redux/React中的应用
  5. Python中缩进是什么?Python特点介绍!
  6. 给文本注册单击事件不起作用问题记录
  7. 唯品会商品图片批量保存,如何下载唯品会商
  8. 让一个销售笑,到底有多简单?
  9. 把锅甩给自己,把爽留给客户!
  10. Servlet基本概念及执行流程