1. 程式人生 > ># Android Drawable子類整理

# 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的程式碼如下: