- 一般用shape定義的xml文件存放在drawable目錄下
- 使用shape可以自定義形狀胧华,可以定義下面四種類型的形狀
rectangle: 矩形,默認(rèn)的形狀蹲堂,可以畫(huà)出直角矩形梁丘、圓角矩形择浊、弧形等
oval: 橢圓形,用得比較多的是畫(huà)正圓
line: 線形范咨,可以畫(huà)實(shí)線和虛線
ring: 環(huán)形,可以畫(huà)環(huán)形進(jìn)度條
rectangle
rectangle是默認(rèn)的形狀厂庇,也是用得最多的形狀渠啊,一些文字背景、按鈕背景权旷、控件或布局背景等
//填充色
solid: 設(shè)置形狀填充的顏色替蛉,只有android:color一個(gè)屬性
android:color 填充的顏色
//內(nèi)間距
padding: 設(shè)置內(nèi)容與形狀邊界的內(nèi)間距,可分別設(shè)置左右上下的距離
android:left 左內(nèi)間距
android:right 右內(nèi)間距
android:top 上內(nèi)間距
android:bottom 下內(nèi)間距
//漸變色
gradient: 設(shè)置形狀的漸變顏色拄氯,可以是線性漸變躲查、輻射漸變、掃描性漸變
android:type 漸變的類型
linear 線性漸變译柏,默認(rèn)的漸變類型
radial 放射漸變镣煮,設(shè)置該項(xiàng)時(shí),android:gradientRadius也必須設(shè)置
sweep 掃描性漸變
android:startColor 漸變開(kāi)始的顏色
android:endColor 漸變結(jié)束的顏色
android:centerColor 漸變中間的顏色
android:angle 漸變的角度鄙麦,線性漸變時(shí)才有效典唇,必須是45的倍數(shù),0表示從左到右黔衡,90表示從下到上
android:centerX 漸變中心的相對(duì)X坐標(biāo)蚓聘,放射漸變時(shí)才有效腌乡,在0.0到1.0之間盟劫,默認(rèn)為0.5,表示在正中間
android:centerY 漸變中心的相對(duì)X坐標(biāo)与纽,放射漸變時(shí)才有效侣签,在0.0到1.0之間,默認(rèn)為0.5急迂,表示在正中間
android:gradientRadius 漸變的半徑影所,只有漸變類型為radial時(shí)才使用
android:useLevel 如果為true,則可在LevelListDrawable中使用
//圓角
corners: 設(shè)置圓角僚碎,只適用于rectangle類型猴娩,可分別設(shè)置四個(gè)角不同半徑的圓角,當(dāng)設(shè)置的圓角半徑很大時(shí)勺阐,比如200dp卷中,就可變成弧形邊了
android:radius 圓角半徑,會(huì)被下面每個(gè)特定的圓角屬性重寫(xiě)
android:topLeftRadius 左上角的半徑
android:topRightRadius 右上角的半徑
android:bottomLeftRadius 左下角的半徑
android:bottomRightRadius 右下角的半徑
//實(shí)線或虛線
stroke: 設(shè)置描邊渊抽,可描成實(shí)線或虛線
android:color 描邊的顏色
android:width 描邊的寬度
android:dashWidth 設(shè)置虛線時(shí)的橫線長(zhǎng)度
android:dashGap 設(shè)置虛線時(shí)的橫線之間的距離
<?xml version="1.0" encoding="utf-8"?>
<!-- android:shape指定形狀類型蟆豫,默認(rèn)為rectangle -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- solid指定形狀的填充色,只有android:color一個(gè)屬性 -->
<solid android:color="#2F90BD" />
<!-- padding設(shè)置內(nèi)容區(qū)域離邊界的間距 -->
<padding
android:bottom="12dp"
android:left="12dp"
android:right="12dp"
android:top="12dp" />
<!-- corners設(shè)置圓角懒闷,只適用于rectangle -->
<corners android:radius="200dp" />
<!-- stroke設(shè)置描邊 -->
<stroke
android:width="2dp"
android:color="@android:color/darker_gray"
android:dashGap="4dp"
android:dashWidth="4dp" />
</shape>
oval
oval用來(lái)畫(huà)橢圓十减,而在實(shí)際應(yīng)用中栈幸,更多是畫(huà)正圓,比如消息提示帮辟,圓形按鈕等
<?xml version="1.0" encoding="utf-8"?>
<!-- android:shape指定形狀類型 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- padding設(shè)置內(nèi)間距 -->
<padding
android:bottom="4dp"
android:left="4dp"
android:right="4dp"
android:top="4dp" />
<!-- size設(shè)置形狀的大小 -->
<size
android:width="40dp"
android:height="40dp" />
<!-- gradient設(shè)置漸變 -->
<gradient
android:endColor="#000000"
android:gradientRadius="40dp"
android:startColor="#FFFFFF"
android:type="radial" />
</shape>
line
line主要用于畫(huà)分割線速址,是通過(guò)stroke和size特性組合來(lái)實(shí)現(xiàn)的
畫(huà)線時(shí),有幾點(diǎn)特性必須要知道的:
1.只能畫(huà)水平線由驹,畫(huà)不了豎線壳繁;
2.線的高度是通過(guò)stroke的android:width屬性設(shè)置的;
3.size的android:height屬性定義的是整個(gè)形狀區(qū)域的高度荔棉;
4.size的height必須大于stroke的width闹炉,否則,線無(wú)法顯示润樱;
5.線在整個(gè)形狀區(qū)域中是居中顯示的渣触;
6.線左右兩邊會(huì)留有空白間距,線越粗壹若,空白越大嗅钻;
7.引用虛線的view需要添加屬性android:layerType,值設(shè)為"software"店展,否則顯示不了虛線
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<!-- 實(shí)際顯示的線 -->
<stroke
android:width="1dp"
android:color="#2F90BD"
android:dashGap="2dp"
android:dashWidth="4dp" />
<!-- 形狀的高度 -->
<size android:height="4dp" />
</shape>
ring
shape根元素有些屬性只適用于ring類型,以下這些屬性:
android:innerRadius 內(nèi)環(huán)的半徑
android:innerRadiusRatio 浮點(diǎn)型养篓,以環(huán)的寬度比率來(lái)表示內(nèi)環(huán)的半徑,默認(rèn)為3赂蕴,表示內(nèi)環(huán)半徑為環(huán)的寬度除以3柳弄,該值會(huì)被android:innerRadius覆蓋
android:thickness 環(huán)的厚度
android:thicknessRatio 浮點(diǎn)型,以環(huán)的寬度比率來(lái)表示環(huán)的厚度概说,默認(rèn)為9碧注,表示環(huán)的厚度為環(huán)的寬度除以9,該值會(huì)被android:thickness覆蓋
android:useLevel 一般為false糖赔,否則可能環(huán)形無(wú)法顯示萍丐,只有作為L(zhǎng)evelListDrawable使用時(shí)才設(shè)為true
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="9"
android:useLevel="false">
<gradient
android:endColor="#2F90BD"
android:startColor="#FFFFFF"
android:type="sweep" />
<stroke
android:width="1dp"
android:color="@android:color/black" />
</shape>
- 如果想讓這個(gè)環(huán)形旋轉(zhuǎn)起來(lái),變成可用的進(jìn)度條放典,則只要在shape外層包多一個(gè)rotate元素就可以了
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="1080.0">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="8"
android:useLevel="false">
<gradient
android:endColor="#2F90BD"
android:startColor="#FFFFFF"
android:type="sweep" />
</shape>
</rotate>