之前已經(jīng)詳細(xì)的說(shuō)明過(guò)shape在xml中的屬性和用法了,參考shape xml屬性詳解剩蟀。shape
是一個(gè)drawable
的xml
文件,下意識(shí)的會(huì)認(rèn)為shape
在代碼中所所對(duì)應(yīng)的類是ShapeDrawable
攀涵,實(shí)際上代碼中是GradientDrawable
托启,所以本文的主角就是GradientDrawable
了。
GradientDrawable
所有的set
方法應(yīng)該都在這里了尖殃,接下來(lái)說(shuō)一些常用的方法丈莺,其他的如有需要可以自行查API∷头幔基本上每個(gè)set
方法也有對(duì)應(yīng)的get
方法.
填充色
setColor
就不說(shuō)了缔俄,對(duì)應(yīng)<solid android:color=""/>
標(biāo)簽。
圖形
圖形對(duì)應(yīng)的是shape
標(biāo)簽中的android:shape=""
屬性器躏,可以使用setShape()
方法設(shè)置俐载,所對(duì)應(yīng)的參數(shù)如下:
//矩形,可以使用圓角
public static final int RECTANGLE = 0;
//橢圓登失,寬高相同也就是圓了
public static final int OVAL = 1;
//線
public static final int LINE = 2;
//環(huán)形
public static final int RING = 3;
圓角
設(shè)置圓角的方法提供了兩個(gè)setCornerRadius()
和setCornerRadii()
setCornerRadius(float Radius)
方法設(shè)置一個(gè)float
值就設(shè)置了所有圓角的半徑
而setCornerRadii(float[] radii)
則需要傳入一個(gè)長(zhǎng)度為8的float[]
遏佣,源碼中對(duì)方法的注釋如下:
Specifies radii for each of the 4 corners. For each corner, the array contains 2 values, [X_radius, Y_radius]. The corners are ordered top-left, top-right, bottom-right, bottom-left.
這里和xml中使用略有不同,xml中提供了4個(gè)角的屬性設(shè)置揽浙,但是此方法需要提供的值有8個(gè)状婶,因?yàn)樵谟?jì)算半徑時(shí)橫向和縱向的半徑時(shí)分開設(shè)置的,所以float[]
的長(zhǎng)度需要是8捏萍。
參數(shù)的注釋中有說(shuō)
float[]
的length >= 8
太抓,也就是說(shuō)參數(shù)數(shù)組至少要包括8個(gè)float
,但是超出的8個(gè)的值并不會(huì)起作用令杈。
描邊
描邊的api就相對(duì)簡(jiǎn)單了走敌,setStroke()
方法,重載了4個(gè)方法逗噩,具體如下:
設(shè)置的屬性命名和xml
的<stroke>
基本一致掉丽,沒(méi)有什么好說(shuō)的直接設(shè)置就好。
大小
setSize(int width, int height)
方法設(shè)置對(duì)象的大小异雁,最終還是view決定大小捶障。
結(jié)語(yǔ)
漸變的在代碼中的使用方式并沒(méi)有研究的很明白,部分方法還設(shè)有API Level的限制也就沒(méi)有進(jìn)行繼續(xù)研究了纲刀。
GradientDrawable
的很多方法并沒(méi)有經(jīng)常使用就也沒(méi)有進(jìn)行研究了项炼。如有不對(duì),請(qǐng)大佬指正。