轉載自:http://blog.csdn.net/feng88724/article/details/6398193
android
在Android開發過程當中,常常須要改變控件的默認樣式, 那麼一般會使用多個圖片來解決。不過這種方式可能須要多個圖片,好比一個按鈕,須要點擊時的式樣圖片,默認的式樣圖片。 這樣就容易使apk變大。學習
那麼除了使用drawable這樣的圖片外,還有其餘方法嗎?spa
本次就談一下自定義圖形shape,Android上支持如下幾種屬性shape、gradient、stroke、corners、padding、solid等。.net
先來看兩個例子:code
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" android:angle="270" /> <padding android:left="50dp" android:top="20dp" android:right="7dp" android:bottom="7dp" /> <corners android:radius="8dp" /> </shape>
效果:xml
<?xml version="1.0" encoding="UTF-8"?> <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#b4000000" /> <stroke android:width="2.0dip" android:color="#b4ffffff" android:dashWidth="3.0dip" android:dashGap="0.0dip" /> <padding android:left="7.0dip" android:top="7.0dip" android:right="7.0dip" android:bottom="7.0dip" /> <corners android:radius="8.0dip" /> </shape>
效果:對象
總結一下Shape的全部子屬性,如圖:blog
單說明一下:圖片
gradient -- 對應顏色漸變。 startcolor、endcolor就很少說了。 android:angle 是指從哪一個角度開始變。ip
solid -- 填充。
stroke -- 描邊。
corners -- 圓角。
padding -- 定義內容離邊界的距離。 與android:padding_left、android:padding_right這些是一個道理。
------------------------------------------------------------------
上面這些不是本講重點。 本講的重點是這些xml中屬性,與Java類的對應關係, 以及如何使用Java類寫出上面同樣的效果!
首先來看對應關係:
在官方API介紹中:
ShapeDrawable :This object can be defined in an XML file with the <shape>
element(這個對象能夠用<shape>元素在xml文件中定義)
GradientDrawable :This object can be defined in an XML file with the <shape>
element(這個對象能夠用<shape>元素在xml文件中定義)
[父節點] shape -- ShapeDrawable
[子節點] gradient --
[子節點] padding --
[子節點] corners -- setCornerRadius 、setCornerRadii
[子節點] solid --
[子節點] stroke -- setStroke
[子節點] size -- setSize
附件對android.graphics.drawable.Drawable包下的類進行了一下總結。 包括類與XML屬性的對應關係。 感受很不錯! 須要的各位能夠學習一下。