Android應用資源—繪制資源類型(Drawable)(五)

嵌入可繪制資源

定義在XML中的一個可繪制資源,它能夠用指定的距離嵌入到另一個可繪制資源中。這種資源可在View對象需要的背景比它的實際邊界小的時候使用。
文件位置(FILE LOCATION):

res/drawable/filename.xml

文件名被用於資源ID。

被編譯資源的數據類型(COMPILED RESOURCE DATATYPE):

資源指向一個InsetDrawable對象。

資源引用(RESOURCE REFERENCE):

在Java代碼中:R.drawable.filename

在XML中:@[package:]drawable/filename

語法(SYNTAX):

    <?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension"/>

元素(ELEMENTS):

  <inset>

      定義嵌入的可繪制資源。它必須是根元素。

      屬性(ATTRIBUTES):

      xmlns:android

      字符串值,必須的。它定義瞭XML的命名空間,必須是:http://schemas.android.com/apk/res/android

      android:drawable

      要繪制的資源,必須的,它指向一個要嵌入的可繪制資源。

      android:insetTop

      尺寸值。用尺寸值或Dimension資源定義頂部的嵌入位置。

      android:insetRight

      尺寸值。用尺寸值或Dimension資源定義右邊的嵌入位置。

      android:insetBottom

      尺寸值。用尺寸值或Dimension資源定義底部的嵌入位置。

      android:insetLeft

      尺寸值。用尺寸值或Dimension資源定義左邊的嵌入位置。

例子(EXAMPLE):

<?xml version="1.0" encoding="utf-8"?>
<insetxmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp"/>

裁剪可繪制資源

定義在XML中的一個可繪制資源,它能夠基於這個資源的當前級別來裁剪另一個繪制資源。它能夠基於級別來控制子繪制資源要被裁剪掉寬度和高度,就像重力來控制資源被放在容器中位置一樣。這種資源經常被用於像進度條這樣的效果。

文件位置(FILE LOCATION):

res/drawable/filename.xml

文件名被用作資源ID。

被編譯資源的數據類型(COMPILED RESOURCE DATATYPE)

資源指向一個ClipDrawable對象。

資源引用(RESOURCE REFERENCE)

在Java代碼中:R.drawable.filename

在XML中:@[package:]drawable/filename

語法(SYNTAX):

 <?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />

 

元素(ELEMENTS):

<clip>

定義要裁剪的繪制資源。它必須是根元素。

屬性(ATTRIBUTES):

    xmlns:android

    字符串值,必須的。它定義瞭XML的命名空間,必須是:http://schemas.android.com/apk/res/android

    android:drawable

   可繪制的資源,必須的。它指向要裁剪的一個可繪制資源。

    android:clipOrientation

關鍵值,它定義瞭裁剪的方向。必須是下列值之一。

  

說明
horizontal 水平方向裁剪可繪制的資源
vertical 垂直方向裁剪可繪制的資源

 

 android:gravity

關鍵值,它指定瞭可繪制資源的裁剪位置。

它必須是下表中的一個或多個值的組合(組合時用“|”來分隔)。

  

說明
top 把對象放到容器的頂部,不改變它的尺寸。當clipOrientation被設置為vertical時,會在可繪制資源的底部進行裁剪。
bottom 把對象放到容器的底部,不改變它的尺寸。當clipOrientation被設置為vertical時,會在可繪制資源的頂部進行裁剪。
left 把對象放到容器的左邊,不改變它的尺寸。這是默認的設置。當clipOrientation被設置為horizontal時,會在可繪制資源的右邊進行裁剪。
right 把對象放到容器的右邊,不改變它的尺寸。當clipOrientation被設置為horizontal時,會在可繪制資源的左邊進行裁剪。
center_vertical 把對象放在容器的垂直中心位置,不改變它的尺寸。裁剪行為與重力被設為center時相同。
fill_vertical 如果需要,對象的垂直尺寸會增長,以便在垂直方向能夠完全填充它的容器。當clipOrientation被設置為vertical時,因為繪制資源要填充垂直空間,所以不會有裁剪發生(除非可繪制資源的級別是0,導致它不可見)。
center_horizontal 把對象放在容器的水平中心,不改變它的尺寸。裁剪行為與重力是center是相同。
fill_horizontal 如果需要,對象會增長它的水平尺寸,以便在水平方向能夠完全填充它的容器。當clipOrientation被設置為horizontal時,因為可繪制資源要填充水平空間,所以不會有裁剪發生(除非可繪制資源被設置為0,導致它不可見)。
center 把對象放到它的容器的中心位置,不改變它的尺寸。當clipOrientation被設置為horizontal時,在左右兩邊會發生裁剪;當clipOrientation被設置為vertical時,在上下兩邊會發生裁剪。
fill 如果需要,對象水平和垂直尺寸都會增長,以便能夠完全填充它的容器。因為可繪制資源要完全填充它的容器的水平和垂直空間,所以不會裁剪發生(除非可繪制資源的級別被設置為0,導致它不可見)。
clip_vertical 額外的選項,它能夠把它的容器的上下邊界,設置為子對象的上下邊緣的裁剪邊界。裁剪要基於對象垂直重力設置:如果重力設置為top,則裁剪下邊,如果設置為bottom,則裁剪上邊,否則則上下兩邊都要裁剪。
clip_horizontal 額外的選項,它能夠把它的容器的左右邊界,設置為子對象的左右邊緣的裁剪邊界。裁剪要基於對象垂直重力設置:如果重力設置為right,則裁剪左邊,如果設置為left,則裁剪右邊,否則則左右兩邊都要裁剪。

例子(EXAMPLE):

XML文件被放在res/drawable/clip.xml中:

<?xml version="1.0" encoding="utf-8"?>
<clipxmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left"/>

下面的佈局XML給一個View對象應用瞭這個裁剪可繪制資源。

<ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"/>

下面的代碼獲取瞭這個可繪制資源,並且為瞭能夠逐步顯示這張圖片,它添加瞭裁剪效果:

ImageView imageview =(ImageView) findViewById(R.id.image);
ClipDrawable drawable =(ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel()+1000);

資源顯示效果如下圖:

 

摘自 FireOfStar的專欄

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *