Android Drawable
Drawable是一个抽象类,是对可绘制物体的抽象,与View不同的是Drawable没有事件和交互方法。Drawable是看不见得,不能为它添加点击事件。
BitmapDrawable
是对bitmap的一种包装,可以设置它包装的bitmap在BitmapDrawable区域内的绘制方式。如平铺填充,拉伸填充或保持图片原始大小。
在drawable下新建bitmap.xml
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:antialias="true"
android:dither="true"
android:src="@mipmap/ic_launcher"
android:tileMode="mirror"> //镜像平铺
</bitmap>
LayerDrawable
可以管理一组Drawable对象,可以按顺序绘制,列表的最后一个drawable绘制在最上层。
如下,两张图片绘制,ic_launcher在test之上。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:gravity="center"
android:left="20dp">
<bitmap
android:gravity="center"
android:src="@mipmap/test" />
</item>
<item
android:gravity="center"
android:left="20dp">
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher" />
</item>
</layer-list>
stateListDrawable
在一个xml文件中进行定义,可以根据不同的状态提供不同的背景。比如,一个按钮的多种状态,获取焦点,失去焦点和点击时背景的不同。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_blue_button_normal"/>
<item android:drawable="@drawable/bg_blue_button_click" android:state_pressed="true"/>
</selector>
LevelListDrawable
一个LeveListDrawable管理着一组交替的drawable资源。LeveListDrawable里面的每一个drawable资源与一个最大数值结合起来,作为LevelListDrawable资源的一项。
调用Drawable的setLevel()方法可以加载level-list或代码中定义的某个drawable资源,判断加载某项的方式:level-list中某项的Android:maxLevel数值大于或者等于setLevel设置的数值,就会被加载。
比如一个电灯开启关闭:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/lamp_off"
android:maxLevel="10"
android:minLevel="6"/>
<item
android:drawable="@drawable/lamp_on"
android:maxLevel="18"
android:minLevel="12" />
</level-list>
setLevel()在6至10,灯灭,在12至18,灯亮
TransitionDrawable
是LeveListDrawable的子类,只负责管理两层drawable,并且提供了一个透明度变化的动画,可以控制从一层drawable过度到另外一层drawable的动画效果
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/lamp_off"/>
<item
android:drawable="@drawable/lamp_on"/>
</transition>
TransitionDrawable drawable = (TransitionDrawable) iv.getDrawable();
drawable.startTransition(1000);
InsetDrawable
表示一个drawable嵌入到另外一个drawable内部,并在内部留一些间距,很像drawable的Padding属性
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/test"
android:insetBottom="20dp"
android:insetLeft="20dp"
android:insetRight="20dp"
android:insetTop="20dp"
>
</inset>
ClipDrawable
- 对Drawable进行剪切操作,控制剪切区域。
- android中的进度条就是使用一个ClipDrawable实现效果的
- 通过setLevle(int level)来设置裁剪区域,0为完全不显示,10000完全显示。
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:drawable="@mipmap/test"
android:gravity="left">
</clip>
RippleDrawable
就是一个自定义触摸反馈动画。是在 Android 5.0 时推出的动画效果。
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#0CC">
<!--显示默认的 drawable-->
<item android:drawable="@drawable/button_default" />
<!--匹配默认值的波纹效果剪切遮罩-->
<item
android:id="@android:id/mask"
android:drawable="@drawable/button_default" />
</ripple>