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

上一篇:/kf/201204/128273.html

Nine-Patch

NinePatch資源是一個PNG圖片,在這個圖片內能夠定義拉伸區域,當在View對象的內容超過瞭普通圖片的邊框時,Android會縮放這個拉伸區域。通常,把這種類型的圖片作為View對象的背景,這個View對象至少有一個尺寸被設置為”wrap_content”,這樣當View對象根據容納的內容增長時,Nine-Patch圖片也會根據View對象的大小被縮放。例如,使用Nine-Patch圖片作為Android標準的Button控件的背景,它會根據Button內部容納的文本來拉伸。

跟普通的位圖一樣,可以直接引用Nine-Patch文件,也可以從XML中定義的資源中來引用。

關於如何創建帶有拉伸區域的Nine-Patch文件的討論,請看2D圖形的相關文檔。

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

Nine-Patch文件

文件位置(FILE LOCATION):

    res/drawable/filename.9.png

    文件名被用於資源ID。

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

    資源指向一個NinePatchDrawable對象。

資源引用(RESOURCE REFERENCE):

    在Java代碼中:R.drawable.filename

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

例子(EXAMPLE):

以下佈局XML中使用瞭res/drawable/myninepatch.9.png圖片,作為一個View對象的背景:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch"/>

XML Nine-Patch

一個XML Nine-Patch是指定義在XML中的一個資源,這個資源指向一個Nine-Patch文件。XML能夠給圖片指定補色。

文件位置(FILE LOCATION):

    res/drawable/filename.xml

    文件名被用作資源的ID。

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

    資源指向一個NinePatchDrawable對象。

資源引用(RESOURCE REFERENCE)

    在Java代碼中:R.drawable.filename

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

語法(SYNTAX):

   <?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" |"false"] />

 

元素(ELEMENTS):

<nine-patch>

     定義Nine-Patch資源和它的屬性。

     屬性(ATTRIBUTES):

         xmlns:android

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

         android:src

        可繪制資源,必須的,它引用瞭一個Nine-Patch文件。

         android:dither

        佈爾值,如果位圖沒有跟屏幕配置相同的像素,那麼就啟用或禁止位圖的仿色處理(例如,一個ARGB 8888位圖用於RGB 565的屏幕)。

例子(EXAMPLE):

<?xml version="1.0" encoding="utf-8"?>
<nine-patchxmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false"/>

層列表

LayerDrawable是一個繪制資源對象,它管理著一個其他繪制資源的數組。列表中的每個可繪制資源會按照列表中的順序來繪制—列表中最後的資源會被繪制在最最上面。

每個繪制資源都用一個<item>元素來代表,這些<item>元素都被放在一個單獨的<layer-list>元素內部。

文件位置(FILE LOCATION):

    res/drawable/filename.xml

    文件名被用作資源ID。

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

    資源指向一個LayerDrawable對象。

資源應用(RESOURCE REFERENCE):

    在Java代碼中:R.drawable.filename

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

語法(SYNTAX):

    <?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension"/>
</layer-list>

元素(ELEMENTS):

    <layer-list>

       必須的,它必須是根元素,包含瞭一個或多個<item>元素。

       屬性(ATTRIBUTES):

        xmlns:android

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

    <item>

    定義一個層中的可繪制資源,其中的一個屬性定義瞭資源的位置。這個可繪制資源必須是<selector>元素的一個子元素。<item>元素接受<bitmap>子元素。

    屬性(ATTRIBUTES):

    android:drawable

    可以繪制資源,必須的,它指向一個可繪制資源。

    android:id

    資源ID,針對這個繪制資源的唯一的資源ID。要使用“@+id/name”格式給這個項目創建一個新的資源ID。“+”號指示這個資源應用創建一個新的ID。能夠使用這個標識符,通過調用View.fineViewById()或Activity.findViewById()方法來獲取和編輯可繪制資源。

    android:top

    整數值,頂部的偏移像素。

    android:right

    整數值,右邊的偏移像素。

    android:bottom

    整數值,底部的偏移像素。

    android:left

    整數值,左邊的偏移像素。

 默認情況下,所有的可繪制項都會被縮放,以便適應容器View對象的尺寸。因此,把層列表中的圖片放到不同的位置,可能會造成View對象的尺寸的增長,並且某些圖片也做相應的縮放。要避免列表中的項目被縮放,就要在<item>元素內部使用<bitmap>元素來指定繪制資源,並且資源不縮放的重心,如“center”。如,下面的<item>元素定義瞭一個能夠適應容器View縮放的繪制項目:

<itemandroid:drawable="@drawable/image"/>

要避免縮放,使用下面的方法來重新定義:

<item>
  <bitmapandroid:src="@drawable/image"
          android:gravity="center"/>
</item>

例子(EXAMPLE):

XML文件被保存在res/drawable/layers.xml中

<?xml version="1.0" encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmapandroid:src="@drawable/android_red"
        android:gravity="center"/>
    </item>
    <itemandroid:top="10dp"android:left="10dp">
      <bitmapandroid:src="@drawable/android_green"
        android:gravity="center"/>
    </item>
    <itemandroid:top="20dp"android:left="20dp">
      <bitmapandroid:src="@drawable/android_blue"
        android:gravity="center"/>
    </item>
</layer-list>

要註意是,這個例子使用瞭嵌套的帶有“center”重心的<bitmap>元素來給每個項目定義繪制資源。這樣就確保瞭圖片在繪制期間,不會為瞭適應容器的尺寸而被縮放。

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers"/>

下圖是繪制結果:

 

摘自 FireOfStar的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。