# Android Drawable子类整理

概述

    Drawable资源是Android应用中使用最广泛的资源,它不仅可以使用各种格式的图片资源,也可以使用多种xml文件资源。

1.一种可以在Canvas上进行绘制的抽象的概念;
2.颜色、图片等都可以是一个Drawable;
3.Drawable可以通过XML定义,或者通过代码创建;
4.Android中Drawable是一个抽象类,每个具体的Drawable都是其子类;

Drawable的分类

Drawable的子类包括ColorDrawable、GradientDrawable、BitmapDrawable、NinePatchDrawable、InsetDrawable、ClipDrawable、ScaleDrawable、RotateDrawable、AnimationDrawable、LayerDrawable、StateListDrawable、TransitionDrawable、VectorDrawable、ShapeDrawable

1.ColorDrawable

A specialized Drawable that fills the Canvas with a specified color.

ColorDrawable是最简单的Drawable,也是平时用的最多的,比如:

android:background = "@color/colorAccent"

ColorDrawable是一个专门用来使用指定的颜色来填充画布的Drawable,当它被绘制到画布上时会使用一种指定的颜色填充Paint,在画布上绘制出一块单色区域。

在xml文件中使用color作为根节点来创建ColorDrawable,它只有一个android:color属性,通过它来决定ColorDrawable的颜色,这个颜色一旦设置之后,就不能直接修改了。

<?xml version="1.0" encoding="utf-8"?>
<color xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ff000000"
    />

通过java代码也可以创建ColorDrawable,代码如下:

ColorDrawable drawable = new ColorDrawable(0xff000000);

2.BitmapDrawable

A Drawable that wraps a bitmap and can be tiled, stretched, or aligned.

BitmapDrawable是对bitmap的一种包装,可以设置它包装的bitmap在BitmapDrawable区域内的绘制方式,如平铺、拉伸填充或者保持图片原始尺寸,也可以在BitmapDrawable区域内部使用gravity指定的对齐方式。

在xml文件中使用bitmap作为根节点来定义BitmapDrawable。

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

其中,src为引用的图片资源;tileMode属性表示平铺模式,一共有4中属性:mirror,repeat,clamp,disabled;dither属性表示是否开启抖动,一般为true;antialias属性表示是否开启抗锯齿功能,一般为true;
也可以使用java代码实现上述相同的效果,等价的java代码如下:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.arrow_down);
BitmapDrawable mBitmapDrawable = new BitmapDrawable(bitmap);
mBitmapDrawable.setTileModeXY(TileMode.MIRROR,TileMode.MIRROR);
mBitmapDrawable.setAntiAlias(true);
mBitmapDrawable.setDither(true);
mDrawable = mBitmapDrawable;

3.GradientDrawable

A Drawable with a color gradient for buttons, backgrounds, etc.

GradientDrawable表示一个渐变区域,可以实现线性渐变、发散渐变和平铺渐变效果;

在xml文件中使用shape作为根节点来创建GradientDrawable,它包含很多属性和子节点,具体如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle | oval | ring | line">
    //                矩形      
    //内部填充色
    <solid android:color="@color/red" />
    //圆角半径
    <corners android:radius="5dp" />
    //边框颜色和宽度
    <stroke android:color="@color/orange" android:width="5dp" />
     //渐变色
    <gradient
         android:angle="integer" //渐变角度(默认为0,即从左到右),须为45的倍数,为0时从左到右
                                 //为90时从上到下,该属性仅对线性渐变有效
        android:centerX="integer"           //渐变中心X的相对位置,范围从0~1
        android:centerY="integer"           //渐变中心Y的相对位置,范围从0~1
        android:startColor="color"          //颜色渐变的开始颜色
        android:centerColor="integer"       //颜色渐变的中心颜色
         android:endColor="color"            //颜色渐变的结束颜色
        android:gradientRadius="integer"    //渐变半径,只有当type为radial时才能使用
        android:type=["linear" | "radial" | "sweep"] //默认值为linear,即线性渐变,radial(放射性渐变),sweep(扫描式渐变)
        android:useLevel=["true" | "false"]     //设置为false才有渐变效果
        />

    //指定大小
    <size android:width="45dp" android:height="45dp" />
    //内边距
    <padding 
        android:left="5dp" android:top="5dp"
        android:right="5dp" android:bottom="5dp" />

4.ScaleDrawable

ScaleDrawable是对一个Drawable进行缩放操作,可以根据level属性控制这个drawable的缩放比例,也可以设置它在容器中的对齐方式。在xml文件中使用scale作为根节点来创建RotateDrawable,创建ScaleDrawable的代码如下:

猜你喜欢

转载自www.cnblogs.com/Ricardoldc/p/10268638.html