轉載請注明出處:http://blog.csdn.net/xiaoyuan511
一、概述
最近太忙了,幾乎每天都在做項目。同時寫兩個項目的感覺真爽。
在我們開發中,會經常遇到shape這種屬性,這種屬性可以在沒有美工的情況照樣可以實現我們想要的效果。自動動手,豐衣足食。
二、效果圖
二、屬性
shape | 描述 |
---|---|
rectangle | 矩形(默認) |
oval | 橢圓 |
line | 直線 |
ring | 環形 |
三、基本屬性
基本屬性 | 描述 |
---|---|
Corners | 圓角 |
Solid | 內部填充顏色 |
Gradient | 漸變色 |
Stroke | 這是描邊屬性,可以定義描邊的寬度,顏色,虛實線等 |
Size | 定義控件大小 |
padding | 內部邊距 |
- Corners
android:radius="dimension" 全部的圓角半徑
android:topLeftRadius="dimension" 左上角的圓角半徑
android:topRightRadius="dimension" 右上角的圓角半徑
android:bottomLeftRadius="dimension" 左下角的圓角半徑
android:bottomRightRadius="dimension" 右下角的圓角半徑
- Solid
android:color="color" 填充顏色
- Gradient
android:type=["linear" | "radial" | "sweep"] 3中漸變類型,線性漸變(默認)/放射漸變/掃描式漸變
android:angle="integer" 漸變角度,必須為45的倍數,0為從左到右,90為從上到下 (只對線性漸變有效)
android:centerX="float" 漸變中心X的相當位置,范圍為0~1
android:centerY="float" 漸變中心Y的相當位置,范圍為0~1
android:startColor="color" 漸變開始點的顏色
android:centerColor="color" 漸變中間點的顏色,在開始與結束點之間
android:endColor="color" 漸變結束點的顏色
android:gradientRadius="float" 漸變的半徑,只有當漸變類型為radial時才能使用
android:useLevel=["true" | "false"] /> 使用LevelListDrawable時就要設置為true。設為false時才有漸變效果
- stroke
android:width="dimension" 描邊的寬度
android:color="color" 描邊的顏色
以下兩個屬性設置虛線
android:dashWidth="dimension" 虛線的寬度,值為0時是實線
android:dashGap="dimension" 虛線間隔
- size
android:width="dimension" 控件寬度
android:height="dimension" 控件高度
- padding
android:left="dimension" 左
android:top="dimension" 上
android:right="dimension" 右
android:bottom="dimension" 下
- 特殊
- ring(環形特有屬性)
android:innerRadius 尺寸,內環的半徑。
android:thickness 尺寸,環的厚度
android:innerRadiusRatio 浮點型,以環的寬度比率來表示內環的半徑,
例如,如果android:innerRadiusRatio,表示內環半徑等于環的寬度除以5,這個值是可以被覆蓋的,默認為9.
android:thicknessRatio 浮點型,以環的寬度比率來表示環的厚度,例如,如果android:thicknessRatio="2",
那么環的厚度就等于環的寬度除以2。這個值是可以被android:thickness覆蓋的,默認值是3.
android:useLevel boolean值,如果當做是LevelListDrawable使用時值為true,否則為false.
四、問題
在xml里面已經設置BackGround已經為shape屬性了。如果在代碼在設置BackGround會把shape的屬性覆蓋掉,我們怎么能保證shape屬性不變,又可以切換顏色那?當然定義多個shape.xml也可以實現的。
我可以通過 GradientDrawable這個類來實現我們的想要的效果
findViewById(R.id.rectangle).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
position++;
GradientDrawable myGrad = (GradientDrawable) allRectangle.getBackground();
switch (position % 6) {
case 0:
myGrad.setColor(Color.argb(255, 249, 122, 3));
break;
case 1:
myGrad.setColor(Color.argb(255, 240, 94, 63));
break;
case 2:
myGrad.setColor(Color.argb(255, 96, 79, 171));
break;
case 3:
myGrad.setColor(Color.argb(255, 36, 198, 89));
break;
case 4:
myGrad.setColor(Color.argb(255, 94, 92, 93));
break;
case 5:
myGrad.setColor(Color.argb(255, 65, 179, 205));
break;
}
}
});
這樣就可以實現我們想要的效果了。
五、總結
上面這些基本上是shape屬性所有用法了,沒有美工我照樣可以做出好看的效果!
六、源碼
七、歡迎大家訪問我的網站和我的公眾號
極客導航---程序員自己的導航網站
程序員自己的導航網站