ShapeDrawable的简单实用

ShapeDrawable图形详解
本文介绍了ShapeDrawable图形的基本概念,包括其特点、应用场景及如何利用它来优化UI设计。重点讲解了四种基本图形:矩形(rectangle)、椭圆(oval)、线(line)和环(ring),并探讨了它们的共同属性如圆角(corners)、填充颜色(solid)、描边(stroke)和间距(padding)。此外,还提供了实践案例供读者参考。

1总括:

shape图形可以理解为我们程序员自己画的UI图,就是一张drawable图形,注意这里可以是纯色或者渐变色,当然渐变色这个比较多样,暂且不在我们的讨论范围.我在这里直接的叫做图形而不叫做图片是因为他是"画"出来,就是说有自己的路径,有些类似于path动画,有自己扩大的特性,自适应的,不像图片会拉伸变形一般.再者就是他比较节省内存,有利于apk的瘦身等.

2,有哪几种图形呢?

四种:rectangle,oval,line,ring.最常用的就属rectangle和line,为什么,就是因为我们Android中的控件都是方的,哈哈.而且一般都是作为背景的,他的大小会随着我们view的大小而进行自己大小的变化

3,有什么属性

以上四种均具有一下的特性:

corners:四周的倒圆角好理解.

gradient:渐变色,不做讨论

solid:填充的颜色,与上边的对立,注意其中是可以填充透明色的,再加一个描边起步更好,haha

stroke:描边,其中的颜色,宽度,线长,线间距自己一看就会的,尝试下就知道了,不用刻意记忆,你也记不住的

padding:shape与将要填充view的间距

size:没啥意义,就是会填充将要填充的对象的,没啥意义,时机工作中也不怎么设置这个

4,怎么办?

知道其中的大概方式架构,用的时候自己组合即可.会最常用的即可,不用面面俱到深刻理解.

5,推荐:开发艺术探索

6,我的简单使用

https://github.com/zzggxx/ShapeDrawable

`ShapeDrawable` 是 Android 中用于绘制自定义形状的类,它继承自 `Drawable`,常用于在代码中动态创建图形。虽然通常通过 XML 的 `<shape>` 标签来定义图形,但也可以通过 Java/Kotlin 代码动态创建和操作 `ShapeDrawable`。 ### 一、ShapeDrawable 常用函数和操作: #### 1. 创建 ShapeDrawable 实例 ```java // 创建一个默认的矩形 ShapeDrawable ShapeDrawable shapeDrawable = new ShapeDrawable(); ``` 或指定形状类型: ```java ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape()); ``` #### 2. 设置形状类型(Shape) Android 提供了多种内置形状类: - `RectShape`:矩形 - `OvalShape`:椭圆 - `ArcShape`:圆弧 - `RoundRectShape`:圆角矩形 ```java shapeDrawable.setShape(new OvalShape()); // 设置为椭圆 ``` #### 3. 设置颜色(Paint) ```java shapeDrawable.getPaint().setColor(Color.RED); ``` #### 4. 设置边框(Stroke) ```java shapeDrawable.getPaint().setStyle(Paint.Style.STROKE); // 设置为描边 shapeDrawable.getPaint().setStrokeWidth(5); // 设置边框宽度 shapeDrawable.getPaint().setColor(Color.BLACK); // 设置边框颜色 ``` #### 5. 设置圆角(仅限 RoundRectShape) ```java float[] radii = new float[] { 20, 20, 20, 20, 20, 20, 20, 20 }; // 每个角两个值:x、y 半径 RoundRectShape roundRect = new RoundRectShape(radii, null, null); ShapeDrawable shapeDrawable = new ShapeDrawable(roundRect); ``` #### 6. 设置渐变背景(Gradient) 虽然 `ShapeDrawable` 不直接支持渐变,但可以通过自定义 `Shader` 实现: ```java Shader shader = new LinearGradient(0, 0, 100, 100, Color.RED, Color.BLUE, Shader.TileMode.MIRROR); shapeDrawable.getPaint().setShader(shader); ``` #### 7. 设置大小(Bounds) ```java shapeDrawable.setBounds(0, 0, 200, 100); // 设置绘制区域 ``` #### 8. 在 View 中使用 ```java View view = findViewById(R.id.my_view); view.setBackground(shapeDrawable); ``` --- ### 二、完整示例代码(Kotlin): ```kotlin val shapeDrawable = ShapeDrawable(RectShape()) shapeDrawable.paint.color = Color.parseColor("#FFA500") shapeDrawable.paint.style = Paint.Style.FILL_AND_STROKE shapeDrawable.paint.strokeWidth = 4f shapeDrawable.setBounds(0, 0, 300, 150) val view: View = findViewById(R.id.my_view) view.background = shapeDrawable ``` --- ### 三、总结 | 功能 | 方法 | |------|------| | 设置形状 | `setShape(Shape)` | | 设置颜色 | `getPaint().setColor()` | | 设置边框 | `getPaint().setStyle(STROKE)` | | 设置渐变 | `getPaint().setShader()` | | 设置大小 | `setBounds()` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值