android中常见的Drawable资源有哪些?

 

      Drawable资源是安卓应用中最多见的一种资源,好比图片等,所以,对于初学者而言,必须掌握drawable资源相关应用。html

      今天在网上恰好看到了一篇介绍android Drawable资源的文章,分享给你们,但愿对你们开发android应用时,使用Drawable资源有所帮助吧。废话很少说,赶忙学起来吧。java

 

Drawable是什么?android

Drawable是一个抽象类(abstract class),它有好多子类(SubClass)来操做具体类型的资源,好比BitmapDrawable是用来操做位图,ColorDrawable用来操做颜色,ClipDrawable用来操做剪切板等。编程

 

在android开发中,Drawable资源通常存储在应用程序目录的\res\drawable目录下,固然依据分辨率的高低能够分别存储不一样分辨率的资源到以下几个目录:canvas

\res\drawable-ldpiide

\res\drawable-mdpi函数

\res\drawable-hdpi工具

\res\drawable-xhdpioop

 

图片资源布局

在android中,图片资源是简单的Drawable资源,目前Android支持的图片格式有:gif、png、jpg等。咱们只须要把图片资源放置到\res\drawable目中,那么在编译后的R.java类中就会生成图片资源的资源ID。

咱们在android编程中就能够经过调用相关的方法来获取图片资源(程序中若是要访问drawable_resource_file_name,那么能够如此:[packagename].R.drawable.drawable_resource_file_name)。

 

但这里须要注意的是,Android  drawable资源的名称有约束,必须是: [a-z0-9_.](即:只能是字母数字及_和.),并且不能以数字开头,不然编译会报错 : Invalid file name: must contain only [a-z0-9_.]

 

下面经过一个代码,直观的演示如何访问一个图片资源(资源名称drawablefilename):

 

ImageView imageView=(ImageView)

  findViewById(R.id.ImageView1);

imageView.setImageResource(

  R.drawable.drawablefilename);

 

StateListDrawable资源

 

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

当StatListDrawable资源做为组件的背景或者前景Drawable资源时,能够随着组件状态的变动而自动切换相对应的资源 ,例如,一个Button能够处于不一样的状态(按钮按下、获取焦点)。

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

 

     下面咱们经过一段代码片断,来向你们展现StateListDrawable资源的XML文件描述:

 

XML 文件存储在: res/drawable/button_statelist.xml :

 

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

<selector xmlns:android=" http://www.maiziedu.com/course/android/">

 

<item android:state_pressed="true"

android:drawable="@drawable/button_pressed" />

 

<item android:state_focused="true"

android:drawable="@drawable/button_focused" />

 

<item android:state_hovered="true"

android:drawable="@drawable/button_focused" />

 

<item android:drawable="@drawable/button_normal"/>

</selector>

 

如下是Button的Layout文件:

<Button

android:layout_height="wrap_content"

 

android:layout_width="wrap_content"

 

android:background="@drawable/button"

 

/>

固然咱们也能够经过代码来设置Button的背景图片:

 

Button imageButton=(Button)

findViewById(R.id.imageButton);

 

imageButton.setBackgroundResource

(R.drawable.button_statelist);

 

ShapeDrawable资源

ShapeDrawable资源能够用于绘制一个特定的形状 ,好比矩形、椭圆等。若是你想本身动态的绘制二位图形,那么咱们就可使用ShapeDrawable资源对象,用ShapeDrawable,绘制咱们所能想象的形状。

一个ShapeDrawable 须要一个Shape对象来管理呈现资源到UI Screen,若是没有Shape设置,那么会默认使用RectShape对象。

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

     经过下面的代码片断,咱们能够看看ShapeDrawable的XML定义:

 

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

<shape xmlns:android=" http://www.maiziedu.com/course/android/"

android:shape="oval">

 

<!-- 定义填充渐变颜色 -->

 

<gradient

  android:startColor="#00f"

  android:endColor="#00f"

  android:angle="45"

  android:type="sweep"/>

 

<!-- 设置内填充 -->

 

<padding android:left="7dp"

  android:top="7dp"

  android:right="7dp"

  android:bottom="7dp" />

 

 

<!-- 设置圆角矩形 -->

 

<corners android:radius="8dp" />

</shape>

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

 

咱们构建自定义形状的View时,因为ShapeDrawable 有其本身的draw()方法,能够构建一个View视图的子类,而后override View.onDraw()方法,以下代码片断是一个样例:

 

public class CustomDrawableView extends View {

 private ShapeDrawable mDrawable;

 

 public CustomDrawableView(Context context) {

 super(context);

 

 int x = 10;

 int y = 10;

 int width = 300;

 int height = 50;

 mDrawable = new ShapeDrawable(new OvalShape());

 mDrawable.getPaint().setColor(0xff74AC23);

 mDrawable.setBounds(x, y, x + width, y + height);

 }

 

 protected void onDraw(Canvas canvas) {

 mDrawable.draw(canvas);

 }

}

基于上述代码咱们能够在咱们的Activity中编程的构建自定义视图:

 

CustomDrawableView mCustomDrawableView;

 

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mCustomDrawableView =

new CustomDrawableView(this);

 

setContentView(mCustomDrawableView);

}

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

 

<com.example.shapedrawable.CustomDrawableViewandroid:layout_width="fill_parent"

android:layout_height="wrap_content"/>

 

ClipDrawable

 

ClipDrawable资源定义在一个XML中,表示裁剪(Clips)一个其余资源基于ClipDrawable资源的Level。你能够控制裁剪的Drawable的宽度高度及gravity属性,ClipDrawable经常被用来做为一个progressbars的实现。

 

如下样例是一个ClipDrawable资源:

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

<clip xmlns:android=" http://www.maiziedu.com/course/android/"

 

android:drawable="@drawable/android"

 

android:clipOrientation="horizontal"

 

android:gravity="left"/>

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

 

<ImageViewandroid:id="@+id/image"

 

android:background="@drawable/clip"

 

android:layout_height="wrap_content"

 

android:layout_width="wrap_content"/>

下面的代码获取drawable而且增长其裁剪,以便于渐增的显示图像

 

ImageView imageview = (ImageView)

findViewById(R.id.image);

 

ClipDrawable drawable = (ClipDrawable)

imageview.getDrawable();

 

drawable.setLevel(drawable.getLevel() + 1000);

固然咱们可使用一个Timer来实现图片的渐增显示。

可是这里须要注意的一点是,默认的Level值是0,表示图片被这个裁剪,故图片是不可见的。当值达到10000是代码裁剪为0,图片能够彻底显示。

 

AnimationDrawable

 

AnimationDrawable经过定义一系列的Drawable对象构建一个基于帧的动画(frame-by-frame animations),能够被用来做为视图的背景色。

 

最简单的构建一个帧动画是在XML文件中构建一个动画,咱们能够设定动画做为视图的背景色,经过调用AnimationDrawable.start()方法来运行动画。

 

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

 

<animation-list

xmlns:android=" http://www.maiziedu.com/course/android/"android:oneshot="true">

   

<item

android:drawable="@drawable/rocket_thrust1"

android:duration="200" />

   

<item

android:drawable="@drawable/rocket_thrust2"

android:duration="200" />

   

<item

android:drawable="@drawable/rocket_thrust3"

android:duration="200" />

 

</animation-list>

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

上述动画运行了3个帧,经过设置<code>android:oneshot</code> 属性(attribute)为true,动画会循环一次并停留在最后一帧,若是为false那么会轮询(loop)的运行动画。

 

咱们能够经过编码来加载播放动画:

 

ImageView img = (ImageView)

 findViewById(R.id.spinning_wheel_image);

 

 img.setBackgroundResource(

 R.drawable.spin_animation);

 

 AnimationDrawable frameAnimation =

 (AnimationDrawable) img.getBackground();

 

 frameAnimation.start();

 

       可是须要提醒你们的是,AnimationDrawable. start()方法不可以在Activity的onCreate()方法中调用,由于AnimationDrawable还未彻底的附加 (attached)到Window,若是你不须要交互而当即播放动画,那么能够在onWindowFocusChanged() 方法中,这个方法会在你的Activity Windows获取焦点是触发。

 

      上面就是android应用中Drawable资源的相关介绍,因为篇幅问题,只介绍了几个比较常见的Drawable资源,还有一些Drawable子类为进行介绍,你们能够直接查看相关官方文档学习。

 

       我的感受上面的介绍仍是颇有用的,是android开发中比较经常使用到的一些操做,你们能够收藏,在之后须要用的时候,直接查阅。

 

相关文章:《Android开发工具经常使用快捷键大全

相关文章
相关标签/搜索