Android shape屬性詳解

轉載請注明出處: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屬性所有用法了,沒有美工我照樣可以做出好看的效果!

六、源碼

點擊下載

七、歡迎大家訪問我的網站和我的公眾號

極客導航---程序員自己的導航網站
程序員自己的導航網站

歡迎關注我的公眾號

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容