Android畫布和圖形繪製—Canvas and Drawables(五)

來源:互聯網
上載者:User

Nine-patch

NinePatchDrawable圖形是可展開的位元影像圖片,Android系統會根據View對象中的內容來自動的調整背景圖片。使用NinePatch圖片的一個例子就是標準Android按鈕的背景圖片---按鈕必鬚根據字串的長度來展開背景圖片。NinePathc圖形繪製的是一個標準的PNG圖片,它包含了一個像素寬的邊框。圖片檔案的副檔名必須是.9.png,並且要儲存到工程的res/drawable/目錄中。

邊框被用於定義圖片的展開和靜態地區。通過在邊框的左邊和上邊(其他邊框的像素應該完成透明或是白色的)繪製一個或多個1像素寬的黑線來指定一個可展開的地區。可有多個可展開的地區,但它們的相對尺寸都相同,最大的地區始終要保持最大的地區。

還可以通過繪製右邊線和底邊線來定義一個圖片的可選繪製地區(有效填充線)。如果一個View對象設定NinePatch圖片作為它的背景,並且給該View對象指定了文本,那麼它就會自我展開,以便所有的文本都能夠被填充在由右邊線和底邊線(如果包括的話)所設計的內部地區,如果不包括填充線,Android系統會使用左邊線和上邊線來定義該繪製地區。

要澄清不同邊線間的差異,為了展開圖片,左邊線和上邊線定義的圖片的像素被允許複製。底邊線和右邊線定義了圖片內相對地區,View對象的內容被允許放到這個地區內。

是用於定義按鈕的一個NinePatch圖片檔案:

這個NinePatch圖片用左邊線和上邊線定義了一個可展開的地區,用右邊線和底邊線定義了一個可繪圖的地區。為了展開圖片,在上面的那個圖片中,灰色的點劃線定指定了圖片將要被重複的地區。在下面的那個圖片中,粉色的矩形指明了View的內容被允許放置的地區。如果該地區不同完全填充View對象的內容,那麼該圖片就會被展開,直到內容被完全填充。

Draw 9-patch工具,使用WYSIWYG圖形編輯器,提供非常方便的建立NinePatch圖片的方法。如果定義的可展開地區在繪製構件的過程中存在像素複製的風險,它甚至會產生一個警告。

樣本XML

該布局XML示範了如何把一個NinePatch圖片添加到一對按鈕中(NinePatch圖片被儲存在res/drawable/my_button_background.9.png中):

<Buttonid="@+id/tiny"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:text="Tiny"
        android:textSize="8sp"
        android:background="@drawable/my_button_background"/>

<Buttonid="@+id/big"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerInParent="true"
        android:text="Biiiiiiig
text!"
        android:textSize="30sp"
        android:background="@drawable/my_button_background"/>

要注意的是,寬度和高度屬性都被設定成了”wrap_content”,以便按鈕能夠根據文本尺寸來調整大小。

以下是使用上面顯示的圖片和XML定義所展現的兩個按鈕。注意,按鈕的寬度和高度是如何根據文本的尺寸來展開背景圖片的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.