【Android Drawable系列】- Shape在代码中的使用GradientDrawable

Android Drawable系列
之前已经详细的说明过shape在xml中的属性和用法了,参考shape xml属性详解。 shape
是一个 drawable
的 xml
文件,下意识的会认为 shape
在代码中所所对应的类是 ShapeDrawable
,实际上代码中是 GradientDrawable
,所以本文的主角就是 GradientDrawable
了。

GradientDrawable
所有的 set
方法应该都在这里了,接下来说一些常用的方法,其他的如有需要可以自行查API。基本上每个 set
方法也有对应的 get
方法.
填充色
setColor
就不说了,对应 <solid android:color=""/>
标签。
图形
图形对应的是 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个方法,具体如下:

设置的属性命名和 xml
的 <stroke>
基本一致,没有什么好说的直接设置就好。
大小
setSize(int width, int height)
方法设置对象的大小,最终还是view决定大小。
结语
渐变的在代码中的使用方式并没有研究的很明白,部分方法还设有API Level的限制也就没有进行继续研究了。
GradientDrawable
的很多方法并没有经常使用就也没有进行研究了。如有不对,请大佬指正。