很多時候,使用shape能夠實現的效果,你用一張圖片也能夠實現,但問題是一張圖片無論你怎么壓縮,它都不可能比一個xml文件小,因此,為了獲得一個高性能的手機App,我們在開發中應該遵循這樣一個原則:能夠用shape實現的效果盡量不使用圖片來實現。
今天我們就一起來看看shape的使用。
首先,使用shape畫的圖形,這個xml文件的根節點是shape,如下:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle|oval|line|ring" >
<shape>
shape取值有四種,可以是rectangle(長方形),oval(橢圓),line(線條),ring(圓環),如果設置的話默認是長方形,只有當我們要畫的圖形是ring的時候,下面這幾個屬性才會生效:
- android:innerRadius:內環的半徑。
- android:innerRadiusRatio:內環的比例,比如這個值為2,那么內環的半徑就為環半徑除以2,如果設置了第一個屬性,則這個屬性不起作用。
- android:thickness:環的厚度。
- android:thicknessRatio:環的厚度比例,比如這個值為2,那么環的厚度就為環半徑除以2,如果設置了第三個屬性,則這個屬性不起作用。
- android:useLevel:只有當我們的shape使用在LevelListDrawable中的時候,這個值為true,否則為false。
以上是shape節點,在shape節點中我們還可以定義其他的節點:
圓角:
<corners
android:radius="20dp"
android:topLeftRadius="20dp"
android:topRightRadius="20dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
/>
android:radius表示長方形四個角的半徑,當然也可以每個角單獨設定,后面單獨設定的圓角半徑會覆蓋android:radius。
漸變:
<gradient
android:angle="90"
android:centerColor="#9ACD32"
android:endColor="#9AC0CD"
android:startColor="#9AFF9A"
android:type="linear"
android:useLevel="false" />
- android:angle="90"表示漸變的起始位置,這個值必須為45的倍數,包括0,0表示從左往右漸變,逆時針旋轉,依次是45,90,135.....,90表示從下往上漸變,270表示從上往下漸變,剩下的大家依次去推理。
- android:startColor="#9AFF9A",表示漸變的起始顏色
- android:centerColor="#9ACD32"表示漸變的過渡顏色
- android:endColor="#9AC0CD"表示漸變的結束顏色
- type表示漸變的類型,有三種,分別是linear(線性變化),radial(輻射漸變)以及sweep(掃描漸變)
- 當type為radial時,我們要設置android:gradientRadius="",這個表示漸變的半徑(線性漸變和掃描漸變不需要設置)
填充:
<solid android:color="#ADFF2F" />
這個比較簡單,不多說。
描邊:
<stroke
android:width="1dp"
android:color="#FFFF00"
android:dashWidth="15dp"
android:dashGap="5dp"
/>
- android:dashWidth表示虛線的寬度
- android:dashGap表示虛線之間的間隔
- 以上兩個屬性如果不設置則為實線
大小:
<size
android:width="1dp"
android:height="1dp"
/>
這個表示該shape的大小,默認情況下,shape的大小與它所在的容器大小成正比。如果我們在ImageView中使用這個shape,那么可以通過android:scaleType="center"屬性來限制這種縮放。
當然,還有一種padding,這和我們在xml文件中用的一樣,我這里就不多說了。
最后,基於以上幾種特性,我做了以下幾種效果供大家參考。
示例效果代碼下載https://github.com/lenve/shape
版權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。