作用:
1,作为ImageView中的图像
2,作为View的背景。
实现方式:
可以用代码实现,也可以用xml来实现。
用xml实现比较简单,也用的最多。
种类:
BitMapDrawable和nine-patch
对应的tag分别是bitmap和nine-patch。
这两种只是对已有的图片资源的简单封装,和本身的Drawable区别就是加了一些属性之类的东西。换句话说,bitmap就是带属性的图片。
StateListDrawable和LevelListDrawable
对应的tag分别是selector和level-list。
这两个类别的Drawable的作用都是在众多的图片中选择一张图来显示。StateList是根据系统事件来控制的,LevelList是通过Drawable的setLevel()或者ImageView的setImageLevel来切换图片的。
ShapeDrawable
对应的tag是shape
如果想用xml定义一个图片资源,那用到的肯定就是ShapeDrawable,这个类可以提供了很多种子标签来自定义一个图片资源。常用的有shape,corners,gradient,solid,stroke,padding,size。
注意:size和shape是必选标签,gradient和solid二选一。corner是shape选择了rectangle之后的可选项目,stroke和padding是可选项。
总之,ShapeDrawable是做demo经常会用到的,在实际的开发过程中则基本不会用到。
LayerDrawable
对应的tag是layer-list
layerlist可以把多个图片合成一张,顺序是先放的在后面,后面放的显示靠前。需要注意的是,item标签可以有子标签在里面,比如说shape。item自身的属性是相对于构成之后的图片的,比如设置了bottom=”10dp”那么这个item的底部距离生成的图片底部8dp。
ClipDrawable
对应的tag是clip
ClipDrawable在我看来就是对LevelListDrawable和LayerDrawable的一个综合产品。clip标签中也可以添加shape标签。但是他可以配合ImageView完美的满足进度条的需要。ImageView设置background属性和src属性,配合setLevel()函数。注意这里的level满值是10000。在Java文件中对应的代码如下
iv= (ImageView) findViewById(R.id.iv);
ClipDrawable clipDrawable=(ClipDrawable)iv.getDrawable();
clipDrawable.setLevel(7000);
注意需要把ImageView得到的Drawable强制转换为ClipDrawable,否则会报错。