GradientDrawable自定义视图设计

ops/2025/3/6 10:19:48/

 简介

        GradientDrawable用于定义具有渐变颜色的图形。作为 Drawable 的一种,GradientDrawable 可以用来设置视图(如 ViewButtonTextView 的背景)的形状、大小、颜色以及边框等属性。它的灵活性使得开发者能够在不依赖外部图片资源的情况下,创建出丰富的视觉效果。

一、GradientDrawable 基本方法

  • setShape(int shape): 设置形状。可用值有 GradientDrawable.RECTANGLE(矩形)GradientDrawable.OVAL(椭圆)GradientDrawable.LINE(线形), 和 GradientDrawable.RING(环形)
  • setGreadientType渐变类型 (gradientType): 包括线性渐变(LinearGradient)、径向渐变(RadialGradient)和扫描渐变(SweepGradient)。
  • setColors(new int [] {起始色,结束色})颜色 (colors): 渐变所使用的颜色数组,可以指定起始色、结束色等。
  • 角度 (angle): 线性渐变的角度,决定渐变的方向。
  • 中心点 (centerXcenterY): 对于径向和扫描渐变定义渐变中心的位置。
  • 半径 (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 提供了强大的自定义能力,使得在不依赖复杂图像资源的情况下也能实现丰富的视觉效果。


http://www.ppmy.cn/ops/163574.html

相关文章

用于管理 Elasticsearch Serverless 项目的 AI Agent

作者&#xff1a;来自 Elastic Fram Souza 由自然语言驱动的 AI 代理&#xff0c;可轻松管理 Elasticsearch Serverless 项目 - 支持项目创建、删除和状态检查。 这个小型命令行工具让你可以用简单的英语管理你的无服务器 Elasticsearch 项目。它通过AI&#xff08;这里是 Ope…

如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档

将飞书的多维表格与DeepSeek R1结合使用&#xff0c;就像为你的数据管理和分析之旅装上一台涡轮增压器。两者的合作&#xff0c;不仅仅在速度上让人耳目一新&#xff0c;更是将智能化分析带入了日常的工作场景。以下是它们如何相辅相成并改变我们工作方式的一些分享。 --- 在…

Diffusion模型中时间t嵌入的方法

Diffusion模型中时间t嵌入的方法 class PositionalEmbedding(nn.Module):def __init__(self, dim, scale1.0):super().__init__()assert dim % 2 0self.dim dimself.scale scaledef forward(self, x):device x.devicehalf_dim self.dim // 2emb math.log(10000) / half_…

FastGPT 源码:混合检索调用链路

文章目录 FastGPT 源码&#xff1a;混合检索调用链路1. 入口函数2. 核心搜索函数3. RRF合并函数4. Rerank重排序函数5. 完整流程 FastGPT 源码&#xff1a;混合检索调用链路 主要调用链路如下&#xff1a; 1. 入口函数 在 dispatchDatasetSearch&#xff08;packages/servic…

Mac OS升级后变慢了,如何恢复老系统?

我的一台Mac Air闲置很久了&#xff0c;原因是某次系统升级后用着会卡&#xff0c;有差不多10年没用了。今天想试着恢复一下出厂系统&#xff0c;目前看这条路可以走通。记录如下&#xff1a; 1、去哪里下载旧版系统&#xff1f; https://support.apple.com/zh-cn/102662 2、…

游戏引擎学习第136天

回顾 今天&#xff0c;我们的工作重点是继续探索之前搭建的资产系统&#xff0c;目的是最终定义我们的资产包文件格式。通过这个工作&#xff0c;我们希望能够创建一个符合我们要求的资产包文件。这样&#xff0c;我可以在直播之外的时间完成它&#xff0c;并为我们提供一个符…

JAVA入门——网络编程简介

自己学习时的笔记&#xff0c;可能有点水&#xff08; 以后可能还会补充&#xff08;大概率不会&#xff09; 一、基本概念 网络编程三要素&#xff1a; IP 设备在网络中的唯一标识 端口号 应用软件在设备中的唯一标识两个字节表示的整数&#xff0c;0~1023用于知名的网络…

基于 Kubernetes 搭建 DevOps 持续集成环境

环境准备 在部署 Kubernetes&#xff08;K8s&#xff09;以及相关 DevOps 工具&#xff08;如 Jenkins、Kuboard、Harbor&#xff09;时&#xff0c;我们需要确保服务器和软件环境符合要求。 服务器及软件环境 服务器配置&#xff1a;2 核 4G 及以上&#xff08;推荐至少 2 …