天天看點

android gradientdrawable改變顔色沒用,【Android Drawable系列】- Shape在代碼中的使用GradientDrawable...

android gradientdrawable改變顔色沒用,【Android Drawable系列】- Shape在代碼中的使用GradientDrawable...

Android Drawable系列

之前已經詳細的說明過shape在xml中的屬性和用法了,參考shape xml屬性詳解。shape是一個drawable的xml檔案,下意識的會認為shape在代碼中所所對應的類是ShapeDrawable,實際上代碼中是GradientDrawable,是以本文的主角就是GradientDrawable了。

android gradientdrawable改變顔色沒用,【Android Drawable系列】- Shape在代碼中的使用GradientDrawable...

GradientDrawable所有的set方法應該都在這裡了,接下來說一些常用的方法,其他的如有需要可以自行查API。基本上每個set方法也有對應的get方法.

填充色

setColor就不說了,對應标簽。

圖形

圖形對應的是shape标簽中的android:shape=""屬性,可以使用setShape()方法設定,所對應的參數如下://矩形,可以使用圓角public static final int RECTANGLE = 0;//橢圓,寬高相同也就是圓了public static final int OVAL = 1;//線public static final int LINE = 2;//環形public static final int RING = 3;

圓角

設定圓角的方法提供了兩個setCornerRadius()和setCornerRadii()

setCornerRadius(float Radius)方法設定一個float值就設定了所有圓角的半徑

而setCornerRadii(float[] radii)則需要傳入一個長度為8的float[],源碼中對方法的注釋如下: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個角的屬性設定,但是此方法需要提供的值有8個,因為在計算半徑時橫向和縱向的半徑時分開設定的,是以float[]的長度需要是8。參數的注釋中有說float[]的length >= 8,也就是說參數數組至少要包括8個float,但是超出的8個的值并不會起作用。

描邊

描邊的api就相對簡單了,setStroke()方法,重載了4個方法,具體如下:

android gradientdrawable改變顔色沒用,【Android Drawable系列】- Shape在代碼中的使用GradientDrawable...

設定的屬性命名和xml的基本一緻,沒有什麼好說的直接設定就好。

大小

setSize(int width, int height)方法設定對象的大小,最終還是view決定大小。

結語

漸變的在代碼中的使用方式并沒有研究的很明白,部分方法還設有API Level的限制也就沒有進行繼續研究了。

GradientDrawable的很多方法并沒有經常使用就也沒有進行研究了。如有不對,請大佬指正。

作者:MrTrying

連結:https://www.jianshu.com/p/0fc589752781