在開發當中一直秉承:能用xml繪製的圖片效果,就一定用xml來繪製。
因爲xml繪製的所佔文件大小比圖片小很多,一般都小於1K。
從shape,layer-list 2種方式來做整理。
shape:
shape有4種屬性,分別描述4種不同的圖形:ovale(圓) line:(線) rectangle:(矩形) ring: (環形)
默認爲rectangle。
子標籤中有gradient、corners、padding、size、solid、stroke;來對圖形進行樣式描述。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle / ovale / ring/ line">
<corners //角半徑 shape = "rectangle" 有用
android:radius="integer"
android:topRightRadius="integer"
android:topLeftRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer"
/>
<gradient //顏色漸變
android:type="linear / radial / sweep" //漸變類型
android:startColor="color" //漸變開始點的顏色
android:centerColor="color" //漸變中間點的顏色,在開始與結束點之間
android:endColor="color" //漸變結束點的顏色
android:angle="integer" //漸變角度,必須爲45的倍數,0爲從左到右,90爲從上到下
android:gradientRadius="float" //漸變的半徑,只有當漸變類型爲radial時才能使用
android:centerX="float" //漸變中心X的相當位置,範圍爲0~1,從左到右,默認0.5
android:centerY="float" //漸變中心Y的相當位置,範圍爲0~1,從上到下,默認0.5
android:useLevel="boolean" //使用LevelListDrawable時就要設置爲true。設爲false時纔有漸變效
/>
//type = linear時,angle屬性纔有效;type=radial時,gradientRadius屬性必須設置;type = sweep時, centerX和centerY屬性纔有效
<solid //填充顏色
android:color = "color"/>
<stroke //邊框描述
android:color = "color"
android:width = "integer"
//邊框虛線
android:dashWidth="integer" //每節虛線的長度
android:dashGap="integer" //每節虛線直接的間隙寬度
/>
<padding //內邊距
android:left = "integer"
android:top = "integer"
android:right = "integer"
android:bottom = "integer"/>
<size //圖片大小
android:width= "integer"
android:height= "integer"/>
</shape>
其中,< corners />子標籤,用來描述圖形4個角的半徑,只有shape = “rectangle”即矩形是纔有用。當shape = “ring” 環形時,設置下面屬性
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadius="integer" //內環半徑
android:thickness="integer" //環的寬度
android:useLevel="false" //boolean值,false值時,才能看見效果。
android:innerRadiusRatio="float" //浮點型,以環的寬度比例來表示內環的半徑。默認是9,就是環的寬度乘以9再除以2就是內環半徑的長度
android:thicknessRatio = "float" 浮點型,以環的寬度比率來表示環的厚度。>
</shape>
< gradient/>漸變時
type = linear時,angle屬性纔有效;當類型type爲radial時,gradientRadius屬性必須設置;當類型type爲sweep時,centerX和centerY屬性纔有效
layer-list:
圖層列表,多個item,先後順序,依次層疊,實現圖層效果。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/circle"/>
<item android:drawable="@drawable/btn_border"/>
</layer-list>
不足之處,多多包涵。