Android應用開發筆記(10):製作自訂背景Button按鈕、自訂形狀Button的全攻略

來源:互聯網
上載者:User

在Android開發應用中,預設的Button是由系統渲染和管理大小的。而我們看到的成功的行動裝置 App,都是有著酷炫的外觀和使用體驗的。因此,我們在開發產品的時候,需要對預設按鈕進行美化。在本篇裡,筆者結合在應用開發中的經驗,探討一下自訂背景的按鈕、自訂形狀按鈕的實現方法。

首先看實現效果:

自訂背景的按鈕目前有2種方式實現,向量和位元影像。

1. 向量圖形繪製的方式

向量圖形繪製的方式實現簡單,適合對於按鈕形狀和圖案要求不高的場合。步驟如下:

(a) 使用xml定義一個圓角矩形,外圍輪廓線實線、內填滿漸層色,xml代碼如下。

//bg_alibuybutton_default.xml<br /><?xml version="1.0" encoding="utf-8"?><br /><layer-list xmlns:android="http://schemas.android.com/apk/res/android"><br /> <item><br /> <shape android:shape="rectangle"><br /> <solid android:color="#FFEC7600" /><br /> <corners<br />android:topLeftRadius="5dip"<br /> android:topRightRadius="5dip"<br /> android:bottomLeftRadius="5dip"<br /> android:bottomRightRadius="5dip" /><br /> </shape><br /> </item><br /> <item android:top="1px" android:bottom="1px" android:left="1px" android:right="1px"><br /> <shape><br /> <gradient<br /> android:startColor="#FFEC7600" android:endColor="#FFFED69E"<br /> android:type="linear" android:angle="90"<br />android:centerX="0.5" android:centerY="0.5" /><br /><corners<br />android:topLeftRadius="5dip"<br /> android:topRightRadius="5dip"<br /> android:bottomLeftRadius="5dip"<br /> android:bottomRightRadius="5dip" /><br /> </shape><br /> </item><br /></layer-list>

同樣定義bg_alibuybutton_pressed.xml和bg_alibuybutton_selected.xml,內容相同,就是漸層顏色不同,用於按鈕按下後的背景變化效果。

(b) 定義按鈕按下後的效果變化描述檔案drawable/bg_alibuybutton.xml,代碼如下。

<?xml version="1.0" encoding="UTF-8"?><br /><selector xmlns:android="http://schemas.android.com/apk/res/android"><br /><item android:state_pressed="true"<br />android:drawable="@drawable/bg_alibuybutton_pressed" /><br /><item android:state_focused="true"<br />android:drawable="@drawable/bg_alibuybutton_selected" /><br /><item android:drawable="@drawable/bg_alibuybutton_default" /><br /></selector>

(c) 在你需要的介面定義檔案中,如layout/main.xml中定義一個Button控制項。

<Button<br /> android:layout_width="120dip"<br /> android:layout_height="40dip"<br /> android:text="向量背景按鈕" android:background="@drawable/bg_alibuybutton" />

這樣,自訂背景的按鈕就可以使用了,在實現onClick方法後就可以響應操作。

 

2. 9-patch圖片背景方式

此種方法相對複雜繁瑣,但可以製作出更多、更複雜樣式的按鈕圖樣。

什麼是9-patch格式呢?

9-patch格式,是在Android中特有的一種PNG圖片格式,以"***.9.png"結尾。此種格式的圖片定義了可以伸縮展開的地區和文字顯示地區,這樣,就可以在Android開發中對非向量圖進行展開而仍然保持美觀。如果使用位元影像而沒有經過9-patch處理的話,效果就會想第一張中的“普通圖片背景按鈕”那樣被無情的展開,影響效果。Android中大量用了這種技術,預設的按鈕的背景就是用了類似的方法實現的。我們看一下google官方的描述:

 

該格式相對於一般PNG圖片來說,多了上下左右各一條1px的黑線。左、上黑線隔開了9個格子,當中一個格子(見Strechable Area地區)聲明為可以進行展開。右、下兩條黑線所定義的Paddingbox地區是在該圖片當做背景時,能夠在圖片上填寫文字的地區。每條黑線都是可以不連續的,這樣就可以定義出很多自動展開的規格。Android sdk中提供了設定的工具,啟動命令位於:$ANDROID_SDK/tools/draw9patch.bat,使用它對於原始PNG進行設定9-patch格式,非常方便,如。


       

draw9patch工具的右側是能夠看到各方向展開後的,你所要做的就是在圖上最外側一圈1px寬的像素上塗黑線。

注意,在draw9patch.bat第一次運行時,sdk2.2版本上會報錯:java.lang.NoClassDefFoundError:org/jdesktop/swingworker/SwingWorker。需要下載swing-worker-1.1.jar
,放入$android_sdk/tools/lib路徑下,成功運行。

此種方法實現的步驟如下。

(a) 使用draw9patch.bat作完圖片後,得到兩張按鈕背景,分別是正常和按下狀態下的,命名為bg_btn.9.png和bg_btn_2.9.png。

(b) 編寫圖片使用描述檔案bg_9patchbutton.xml。

// in bg_9patchbutton.xml<br /><?xml version="1.0" encoding="UTF-8"?><br /><selector xmlns:android="http://schemas.android.com/apk/res/android"><br /><item android:state_pressed="true"<br />android:drawable="@drawable/bg_btn_2" /><br /><item android:state_focused="true"<br />android:drawable="@drawable/bg_btn_2" /><br /><item android:drawable="@drawable/bg_btn" /><br /></selector>

(c) 在介面定義檔案 layout/main.xml中添加Button、ImageButton按鈕控制項的定義。Button、ImageButton都是可以使用背景屬性的。

<Button<br /> android:layout_width="120dip"<br /> android:layout_height="40dip"<br /> android:text="9-patch圖片背景按鈕"<br /> android:background="@drawable/bg_9patchbutton" /><br /> <Button<br /> android:layout_width="200dip"<br /> android:layout_height="40dip"<br /> android:text="9-patch圖片背景按鈕"<br /> android:background="@drawable/bg_9patchbutton" /><br /> <Button<br /> android:layout_width="120dip"<br /> android:layout_height="80dip"<br /> android:text="9-patch圖片背景按鈕"<br /> android:background="@drawable/bg_9patchbutton" /><br /> <ImageButton<br /> android:layout_width="120dip"<br /> android:layout_height="40dip"<br /> android:src="@drawable/bg_9patchbutton"<br /> android:scaleType="fitXY"<br /> android:background="@android:color/transparent" />

以上2種實現按鈕的美化,都是標準的矩形按鈕為基礎。在一些應用中我們可以看到漂亮的自訂形狀的異形按鈕,這是怎麼實現的呢?經過一番研究和實踐,找出了一種方便的方法,就是使用ImageButton加上9-patch就可以實現漂亮的自動延伸效果。

 

3. 自訂形狀、顏色、圖樣的按鈕的實現

步驟如下。

(a) 設計一張自訂形狀風格背景的圖片,如。

(b) 未點擊和按下後的狀態各做一張,形成一套圖片,如。


forward.png  
forward2.png

(c) 建立和編寫按鈕不同狀態的圖片使用描述檔案drawable/ib_forward.xml

// ib_forward.xml<br /><?xml version="1.0" encoding="UTF-8"?><br /><selector xmlns:android="http://schemas.android.com/apk/res/android"><br /><item android:state_pressed="true"<br />android:drawable="@drawable/forward2" /><br /><item android:state_focused="true"<br />android:drawable="@drawable/forward2" /><br /><item android:drawable="@drawable/forward" /><br /></selector>

(d) 在介面定義檔案 layout/main.xml中添加ImageButton按鈕控制項的定義。

// in layout/main.xml<br /> <ImageButton<br /> android:layout_width="80dip"<br /> android:layout_height="40dip"<br /> android:src="@drawable/ib_forword"<br /> android:scaleType="fitXY"<br /> android:background="@android:color/transparent" />

 

 

 

著作權歸個人所有,轉載請註明出處

http://blog.csdn.net/xjanker2/archive/2011/03/04/6222690.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.