Android之Drawable资源(一)

2016-08-02  本文已影响331人  998584f56259

文章引用于:http://blog.csdn.net/yuzhiyuxia/article/details/8806488

Drawable的所有直接和间接子类


1_1.png 1_2.png 1_3.png 2_1.jpg

我们看到Drawable是一个抽象类(abstract class),它有好多子类(SubClass),直接的(Direct)或间接的(Indirect)来操作具体Drawable类型的资源,比如BitmapDrawable是用来操作位图,ColorDrawable用来操作颜色。

1、图片资源
图片资源是简单的Drawable资源,目前Android支持的图片格式有:gif、png、jpg等。我们只需要把图片资源放置在res\mipmap目录中,那么在编译后的R类中就会生成图片资源的资源ID。

我们在程序中就可以通过调用相关的方法来获取图片资源(程序中如果要访问drawable_resource_file_name,那么可以如此:[packagename].R.drawable.drawable_resource_file_name)。

以下代码片段演示了如何访问一个图片资源


2_2.jpg

2、StateListDrawable资源
StateListDrawable内可以分配一组Drawable资源,StateListDrawable被定义在一个XML文件中,以<selector>元素起始。其内部的每一个Drawable资源内嵌在<item>元素中。

当StateListDrawable资源作为组件的背景或者前景Drawable资源时,可以随着组件状态的变更而自动切换相对应的资源,例如,一个Button可以处于不同的状态(按钮按下、获取焦点)

我们可以使用一个StateListDrawable资源,来提供不同的背景图片对于每一个状态,当组件的状态变更时,会自动向下遍历StateListDrawable对应的xml文件来查找第一个匹配的Item。

StateListDrawable资源所支持的组件状态如下所示:


2_3.png

以下代码片段是一个StateListDrawable资源的XML文件描述样例:
XML文件存储在:res/drawable/button_statelist.xml


2_4.jpg

以下是Button的Layout文件:


2_5.jpg

当然我们也可以通过代码来设置Button的背景图片:


2_6.jpg

3、ShapeDrawable资源
ShapeDrawable资源绘制一个特定的形状,比如矩形、椭圆等。如果你想要自己动态的绘制二位图形,那么我们就可以使用ShapeDrawable资源对象,用ShapeDrawable,我们可以绘制我们所能想象的形状。一个ShapeDrawable需要一个Shape对象来管理呈现资源到UI Screen,如果没有Shape设置,那么会默认使用RectShape对象。

ShapeDrawable被定义在一个Xml文件中,以<shape>元素起始。其内部的每一个Drawable资源内嵌在<item>元素中

以下代码片段便是一个ShapeDrawable的XML定义


2_7.jpg

我们可以使用ShapeDrawable来设置组件的背景色(setBackgroundDrawable()方法),如上的代码片可以设置一个TextEdit的背景为蓝色的椭圆形状。当然我们也可以绘制自定义的View。

我们构建自定义形状的View时,由于ShapeDrawable有其自己的draw()方法,我们可以构建一个View视图的子类,如下代码片段是一个样例:


2_8.jpg

基于上述代码我们可以在Activity中构建自定义视图:


2_9.jpg

当然我们也可以使用XML文件来描述:自定义的Drawable类必须重载View(Context,AttributeSet)构造函数。接着我们添加Layout文件如下:


2_10.jpg

4、ClipDrawable
ClipDrawable资源定义在一个XML中,表示裁剪(Clips)一个其他资源基于ClipDrawable资源的Level。你可以控制裁剪的Drawable的宽度、高度及gravity属性,ClipDrawable常常被用来作为一个progressbars的实现。

以下样例是一个ClipDrawable资源:


2_11.jpg

下面的ImageView布局文件应用ClipDrawable资源:


2_12.jpg

下面的代码获取Drawable并且增加其裁剪,以便于渐增的显示图像


2_13.jpg

注意:默认的level值是0,表示图片呗这个裁剪,故图片是不可见的。当值达到10000是代码裁剪为0,图片可以完全显示。

5、AnimationDrawable
AnimationDrawable通过定义一系列的Drawable对象构建一个基于帧的动画(frame-by-frame animations),可以被用来作为视图的背景色。

最简单的构建一个帧动画的方法是在XML文件中构建一个动画,我们可以设定动画作为视图的背景色,通过调用AnimationDrawable.satrt()方法来进行动画。

如下代码片段是一个AnimationDrawable资源的XML文件,资源文件位置:res\drawable\spin_animation.xml


2_13.jpg

我们可以看到,AnimationDrawable资源文件以<animation-list>元素为根,包含一系列的<item>节点,每一个节点定义了一个帧(frame)及持续时常。

上述动画运行了三个帧,通过设置android:oneshot属性(attribute)为true,动画会循环一次并停留在最后一帧。如果为false,那么会轮询(loop)的运行动画。

我们可以通过编码来加载播放动画:


2_14.jpg

注意:AnimationDrawable.start()方法不能够在Activity的onCreate()方法中调用,因为AnimationDrawable还未完全的附加(attached)到Window,如果你不需要交互而立即播放动画,那么可以在onWindowFocusChanged()方法中,这个方法会在你的Activity Windows获取焦点时触发。

上一篇 下一篇

猜你喜欢

热点阅读