轉:Android中shape的使用

本人在美工方面一直是比較白癡的,對於一些顏色什麼亂七八糟的非常頭痛,但是在Android編程中這又是經常涉及到的東西,沒辦法,只有硬着頭皮上。

Android中常常使用shape來定義控件的一些顯示屬性,今天看了一些shape的使用,對shape有了大體的瞭解,稍作總結:
先看下面的代碼:

solid:實心,就是填充的意思

Xml代碼 複製代碼 收藏代碼

  1. <shape>
  2. <!-- 實心 -->
  3. <solid android:color="#ff9d77"/>
  4. <!-- 漸變 -->
  5. <gradient
  6. android:startColor="#ff8c00"
  7. android:endColor="#FFFFFF"
  8. android:angle="270" />
  9. <!-- 描邊 -->
  10. <stroke
  11. android:;2dp"
  12. android:color="#dcdcdc" />
  13. <!-- 圓角 -->
  14. <corners
  15. android:radius="2dp" />
  16. <padding
  17. android:left="10dp"
  18. android:top="10dp"
  19. android:right="10dp"
  20. android:bottom="10dp" />
  21. </shape>
<shape> <!-- 實心 --> <solid android:color="#ff9d77"/> <!-- 漸變 --> <gradient android:startColor="#ff8c00" android:endColor="#FFFFFF" android:angle="270" /> <!-- 描邊 --> <stroke android:;2dp" android:color="#dcdcdc" /> <!-- 圓角 --> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape>

android:color指定填充的顏色
gradient:漸變
android:startColor和android:endColor分別爲起始和結束顏色,ndroid:angle是漸變角度,必須爲45的整數倍。
另外漸變默認的模式爲android:type="linear",即線性漸變,可以指定漸變爲徑向漸變,android:type="radial",徑向漸變需要指定半徑android:gradientRadius="50"。
stroke:描邊
android:;2dp" 描邊的寬度,android:color 描邊的顏色。
我們還可以把描邊弄成虛線的形式,設置方式爲:
android:dash;5dp" 
android:dashGap="3dp"
其中android:dashWidth表示'-'這樣一個橫線的寬度,android:dashGap表示之間隔開的距離。
corners:圓角
android:radius爲角的弧度,值越大角越圓。
我們還可以把四個角設定成不同的角度,方法爲:
<corners 
        android:topRightRadius="20dp"    右上角
        android:bottomLeftRadius="20dp"    右下角
        android:topLeftRadius="1dp"    左上角
        android:bottomRightRadius="0dp"    左下角
/>
這裏有個地方需要注意,bottomLeftRadius是右下角,而不是左下角,這個有點鬱悶,不過不影響使用,記得別搞錯了就行。
還有網上看到有人說設置成0dp無效,不過我在測試中發現是可以的,我用的是2.2,可能修復了這個問題吧,如果無效的話那就只能設成1dp了。
padding:間隔
這個就不用多說了,XML佈局文件中經常用到。
大體的就是這樣,以下是一個使用的具體示例:用在Selector中作爲Button的背景,分別定義了按鈕的一般狀態、獲得焦點狀態和按下時的狀態,具體代碼如下:

Xml代碼 複製代碼 收藏代碼

  1. main.xml:  
  2. <Button
  3. android:layout_;wrap_content"
  4. android:layout_height="wrap_content"
  5. android:text="TestShapeButton"
  6. android:background="@drawable/button_selector"
  7. />
  8. button_selector.xml:  
  9. <?xml version="1.0" encoding="utf-8"?>
  10. <selector
  11. xmlns:android="http://schemas.android.com/apk/res/android">
  12. <item android:state_pressed="true" >
  13. <shape>
  14. <!-- 漸變 -->
  15. <gradient
  16. android:startColor="#ff8c00"
  17. android:endColor="#FFFFFF"
  18. android:type="radial"
  19. android:gradientRadius="50" />
  20. <!-- 描邊 -->
  21. <stroke
  22. android:;2dp"
  23. android:color="#dcdcdc"
  24. android:dash;5dp"
  25. android:dashGap="3dp" />
  26. <!-- 圓角 -->
  27. <corners
  28. android:radius="2dp" />
  29. <padding
  30. android:left="10dp"
  31. android:top="10dp"
  32. android:right="10dp"
  33. android:bottom="10dp" />
  34. </shape>
  35. </item>
  36. <item android:state_focused="true" >
  37. <shape>
  38. <gradient
  39. android:startColor="#ffc2b7"
  40. android:endColor="#ffc2b7"
  41. android:angle="270" />
  42. <stroke
  43. android:;2dp"
  44. android:color="#dcdcdc" />
  45. <corners
  46. android:radius="2dp" />
  47. <padding
  48. android:left="10dp"
  49. android:top="10dp"
  50. android:right="10dp"
  51. android:bottom="10dp" />
  52. </shape>
  53. </item>
  54. <item>
  55. <shape>
  56. <solid android:color="#ff9d77"/>
  57. <stroke
  58. android:;2dp"
  59. android:color="#fad3cf" />
  60. <corners
  61. android:topRightRadius="5dp"
  62. android:bottomLeftRadius="5dp"
  63. android:topLeftRadius="0dp"
  64. android:bottomRightRadius="0dp"
  65. />
  66. <padding
  67. android:left="10dp"
  68. android:top="10dp"
  69. android:right="10dp"
  70. android:bottom="10dp" />
  71. </shape>
  72. </item>
  73. </selector>
main.xml: <Button android:layout_;wrap_content" android:layout_height="wrap_content" android:text="TestShapeButton" android:background="@drawable/button_selector" /> button_selector.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" > <shape> <!-- 漸變 --> <gradient android:startColor="#ff8c00" android:endColor="#FFFFFF" android:type="radial" android:gradientRadius="50" /> <!-- 描邊 --> <stroke android:width="2dp" android:color="#dcdcdc" android:dashWidth="5dp" android:dashGap="3dp" /> <!-- 圓角 --> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item android:state_focused="true" > <shape> <gradient android:startColor="#ffc2b7" android:endColor="#ffc2b7" android:angle="270" /> <stroke android:width="2dp" android:color="#dcdcdc" /> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item> <shape> <solid android:color="#ff9d77"/> <stroke android:width="2dp" android:color="#fad3cf" /> <corners android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:topLeftRadius="0dp" android:bottomRightRadius="0dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> </selector>

運行效果如下圖:

一般狀態:

獲得焦點狀態:

按下狀態:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章