1.Drawable概述:Drawable是对可绘制物件的抽象。它没有事件和交互方法。
2.Drawable分类:Drawable可以分为两种,一种是普通的图片资源,一般放在res/mipmap目录下,另一种是已XML形式的Drawable资源,一般放在res/drawable目录下。
3.Drawable是一个抽象类,Drawable的子类有13种。
4.BitmapDrawable:是对bitmap的一种包装,可以设置它包装的bitmap在BitmapDrawable区域内的绘制方式,例如平铺填充,拉伸填充或者保持图片原始大小。
以bitmap为根节点,
属性:src图片资源,
antialias是否支持抗锯齿,
filter是否支持位图过滤,支持的话可以使图片显示时比较光滑,
dither是否对位图进行抖动处理,
gravity若位图比容器小,可以设置位图在容器中的相对位置,
tileMode指定图片平铺填充容器的模式,设置这个属性时gravity属性会被忽略,可选值有:disable(整个图案拉伸平铺),clamp(原图大小),repeat(平铺),mirror(镜像平铺)

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_launcher"
    android:dither="true"
    android:tileMode="repeat">
</bitmap>

5.LayerDrawable:可以管理一组drawable对象在LayerDrawable的drawable资源按照列表的顺序绘制,列表的最后一个drawable绘制在最上层。
以layer-list为根节点,
属性:drawable:引用的位图资源,如果为空需要有一个Drawable类型的子节点
left:层相对于容器的左边距
right:层相对于容器的右边距
top:层相对于容器的上边距
bottom:层相对于容器的下边距
id:层的id

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:gravity="center"
        android:left="20dp">
        <bitmap
            android:gravity="center"
            android:src="@drawable/adc_5"/>
    </item>
    <item
        android:gravity="center"
        android:left="20dp">
        <bitmap
            android:gravity="center"
            android:src="@drawable/face_01"/>
    </item>
</layer-list>

6.StateListDrawable:可以根据不同的状态提供不同的背景。比如,一个按钮有多种状态,获取焦点,失去焦点,点击等。
以selector为根节点
属性:drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态~
state_focused:是否获得焦点
state_window_focused:是否获得窗口焦点
state_enabled:控件是否可用
state_checkable:控件可否被勾选,eg:checkbox
state_checked:控件是否被勾选
state_selected:控件是否被选择,针对有滚轮的情况
state_pressed:控件是否被按下
state_active:控件是否处于活动状态,eg:slidingTab
state_single:控件包含多个子控件时,确定是否只显示一个子控件
state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态·
7.TransitionDrawable:是LayerDrawable的子类,只负责管理两层Drawable,并且提供一个透明度变化的动画,可以控制一层drawable过度到另外一层drawable的动画效果。
跟节点为transition,只有两个item需要调用startTransition方法启动两层间的切换,也可以调用reverseTransition方法反过来播放。

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/adc_5"/>
    <item
        android:drawable="@drawable/adc_3"/>
</transition>
public class TransitionActivity extends AppCompatActivity {
    private ImageView imgShow;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.transition);
        imgShow = (ImageView) findViewById(R.id.img_show);
        TransitionDrawable td= (TransitionDrawable) imgShow.getDrawable();
        td.startTransition(4000);

    }
}

8.InsetDrawable:表示一个drawable嵌入到另外一个drawable内部,并且在内部留一些间距,这一点很像drawable的padding属性。
以inset为根节点,属性:
drawable:引用的Drawable,如果为空,必须有一个Drawable类型的子节点
insetLeft左边距等等
9.ClipDrawable:对drawable进行剪切操作,控制剪切区域,通过setLevel方法来设置剪切区域,level从0到10000,为0时完全不显示,为10000时完全显示