简介
GradientDrawable
用于定义具有渐变颜色的图形。作为 Drawable
的一种,GradientDrawable
可以用来设置视图(如 View
、Button
、TextView
的背景)的形状、大小、颜色以及边框等属性。它的灵活性使得开发者能够在不依赖外部图片资源的情况下,创建出丰富的视觉效果。
一、GradientDrawable
基本方法
- setShape(int shape): 设置形状。可用值有
GradientDrawable.RECTANGLE(矩形)
,GradientDrawable.OVAL(椭圆)
,GradientDrawable.LINE(线形)
, 和GradientDrawable.RING(环形)
。 环
- setGreadientType渐变类型 (
gradientType
): 包括线性渐变(LinearGradient
)、径向渐变(RadialGradient
)和扫描渐变(SweepGradient
)。 - setColors(new int [] {起始色,结束色})颜色 (
colors
): 渐变所使用的颜色数组,可以指定起始色、结束色等。 - 角度 (
angle
): 线性渐变的角度,决定渐变的方向。 - 中心点 (
centerX
,centerY
): 对于径向和扫描渐变定义渐变中心的位置。 - 半径 (
gradientRadius
): 径向渐变中圆的半径。 - 边框 (
stroke
): 设置边框的颜色、宽度以及边框的虚实线样式。 - 圆角 (
corners
): 可以分别设置四个角的圆角半径,或者统一设置所有角的圆角半径。 - 边距 (
padding
): 设置Drawable的内部边距。 - setColor(int color): 设置单色填充。如果设置了渐变颜色,这个方法将会被忽略。
- setColors(int[] colors): 设置渐变颜色数组。至少需要两种颜色来形成渐变效果。
- setSize(int width, int height): 设置大小。
- setPadding(int left, int top, int right, int bottom): 设置内部边距。
- setCornerRadius(float radius): 设置所有圆角的半径。如果设置的形状为矩形,这将使矩形变为圆角矩形。
-
gradientDrawable.setCornerRadius(10); // 10dp的圆角
- setCornerRadii(float[] radii): 分别设置每个圆角的半径,适用于需要不同圆角半径的情况。
- setStroke(int width, int color): 设置边框宽度和颜色。
-
gradientDrawable.setStroke(2, Color.BLACK); // 2dp宽的黑色边框
二、使用示例:
假设你要为一个按钮设置一个从左上到右下的线性渐变背景,代码示例如下:
1// 在代码中创建 GradientDrawable
2GradientDrawable gradientDrawable = new GradientDrawable();
3gradientDrawable.setShape(GradientDrawable.RECTANGLE); // 设置形状为矩形,默认就是矩形,这行可省略
4
5// 设置渐变颜色
6int[] colors = {Color.RED, Color.BLUE}; // 从红色渐变到蓝色
7gradientDrawable.setColors(colors);
8gradientDrawable.setOrientation(GradientDrawable.Orientation.TOP_BOTTOM); // 渐变方向从上到下
9
10// 设置圆角
11gradientDrawable.setCornerRadius(10); // 10dp的圆角
12
13// 设置边框
14gradientDrawable.setStroke(2, Color.BLACK); // 2dp宽的黑色边框
15
16// 将 GradientDrawable 应用到按钮背景
17Button button = (Button) findViewById(R.id.my_button);
18button.setBackground(gradientDrawable);
三、XML定义:
除了在代码中动态创建,你也可以在XML资源文件中定义 GradientDrawable
,通常放在 res/drawable
文件夹下,例如创建一个名为 gradient_bg.xml
的文件:
Xml
1<shape xmlns:android="http://schemas.android.com/apk/res/android">
2 <gradient
3 android:startColor="#FF0000"
4 android:endColor="#0000FF"
5 android:angle="90"/> <!-- 90度表示从顶部到底部的渐变 -->
6
7 <corners android:radius="10dp"/> <!-- 圆角 -->
8 <stroke android:color="#000000" android:width="2dp"/> <!-- 边框 -->
9</shape>
然后直接在布局文件中引用这个背景:
Xml
1<Button
2 android:id="@+id/my_button"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:background="@drawable/gradient_bg"/>
GradientDrawable
提供了强大的自定义能力,使得在不依赖复杂图像资源的情况下也能实现丰富的视觉效果。