📜  Android 中的 GradientDrawable(1)

📅  最后修改于: 2023-12-03 15:13:21.306000             🧑  作者: Mango

Android 中的 GradientDrawable

在 Android 中绘制各种形状的背景和边框需要用到 GradientDrawable,它是一个可绘制的 Shape 类型,能够绘制矩形、椭圆形、环形和渐变等形状。本文将介绍 GradientDrawable 的使用方法。

基本用法

通常,GradientDrawable 可以根据以下属性来进行定制:

  • solid 颜色区域
  • stroke 边框
  • gradient 渐变

在 XML 中,我们可以这样使用 GradientDrawable:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FF8800"/>
    <stroke android:width="1dp" android:color="#000000"/>
    <corners android:radius="5dp"/>
</shape>

将以上代码放进 drawable 文件夹中的 XML 文件,通过以下方式使用:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="My Button"
    android:background="@drawable/my_button_background"/>

这里,@drawable/my_button_background 就是我们创建的背景资源。

动态用法

我们也可以在代码中动态使用 GradientDrawable。下面是一个示例,建立了一个带倒角的圆形按钮:

GradientDrawable drawable = new GradientDrawable();
drawable.setColor(0xFF8800);
drawable.setStroke(1, 0xFF000000);
drawable.setShape(GradientDrawable.OVAL);
drawable.setCornerRadii(new float[]{5, 5, 5, 5, 5, 5, 5, 5});

这里,setCornerRadii 方法接受四个值,分别表示左上、右上、右下、左下边角的角度,每两个值表示一个角度,不同角度之间用逗号隔开。

渐变用法

GradientDrawable 还支持线性渐变和径向渐变。下面是一个线性渐变示例:

int[] colors = {0xFF0000FF, 0xFF00FF00, 0xFFFF0000};
GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, colors);

这里,Orientation 属性表示渐变方向,接受的值有:LEFT_RIGHTRIGHT_LEFTTOP_BOTTOMBOTTOM_TOPTL_BRTR_BLBL_TRBR_TL

径向渐变示例:

float centerX = 0.5f;
float centerY = 0.5f;
GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[]{Color.RED, Color.BLUE});
drawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
drawable.setGradientRadius(0.5f);
drawable.setGradientCenter(centerX, centerY);

这里,setGradientType 方法指定使用什么类型的渐变,接受的值有:LINEAR_GRADIENT(线性渐变)、RADIAL_GRADIENT(径向渐变)、SWEEP_GRADIENT(扫描式渐变)。

setGradientRadius 中的值表示渐变的半径,setGradientCenter 中的两个值表示渐变圆心的位置。

总结

GradientDrawable 在 Android 中是一个非常实用的组件。它可以帮助开发者轻松地实现各种形状的背景和边框,并且支持丰富的渐变效果。