Drawable setBounds()中的rect

本文详细介绍了Drawable的setBounds方法及其四个参数的作用。该方法用于定义Drawable在Canvas上的绘制区域,通过设置左、顶、右、底四个坐标来确定具体的绘制范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自
http://blog.youkuaiyun.com/szyangzhen/article/details/48094223
setBounds(int left, int top, int right, int bottom)

Drawable的setBounds方法有四个参数,setBounds(int left, int top, int right, int bottom),这个四参数指的是drawable将在被绘制在canvas的哪个矩形区域内(这个矩形区域的坐标是以canvas左上角为坐标原点的)。

### Android Drawable 类使用教程和属性介绍 #### 一、Drawable概述 在Android开发中,`Drawable`是一个非常重要的资源类型,用于表示图像和其他可以绘制的对象。这些对象可以在XML文件中定义,也可以通过Java/Kotlin代码动态创建。常见的`Drawable`子类有`BitmapDrawable`, `ShapeDrawable`, `GradientDrawable`等[^1]。 #### 二、Drawable的主要用途 - **作为视图组件的背景** - 可以为按钮、文本框等各种UI控件设置自定义样式。 - **显示图标或图片** - 支持静态图片以及动画效果(如GIF),这通常涉及到第三方库的支持,比如`android-gif-drawable`[^2]。 - **构建复杂图形** - 利用形状(`shape`)、渐变(`gradient`)等功能实现丰富的视觉设计需求。 #### 三、常见类型的Drawable及其特点 ##### BitmapDrawable 这是最基础的一种形式,主要用于展示位图资源,即PNG/JPEG/GIF格式的图片文件。可以通过资源ID直接引用项目中的assets或者res/drawable目录下的素材[^4]。 ```xml <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_launcher"/> ``` ##### ShapeDrawable & GradientDrawable 这两种都是用来描述几何形状的颜色填充方式。其中`ShapeDrawable`允许开发者指定矩形(rectangle)、椭圆形(oval)、线条(line)或是环状(ring),而`GradientDrawable`则进一步提供了线性/径向等多种渐变模式的选择。 ```xml <!-- 定义一个带圆角边框的矩形 --> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF" /> <corners android:radius="8dp" /> </shape> ``` ##### LayerDrawable 当需要组合多个不同的Drawables时就可以考虑使用LayerDrawable了。它按照层次结构依次渲染每一层的内容,并支持调整各层之间的相对位置关系。 ```xml <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 底层 --> <item android:drawable="@drawable/background_shape"></item> <!-- 上层 --> <item android:top="50px" android:right="50px" android:left="50px" android:bottom="50px"> <bitmap android:src="@drawable/icon_image"/> </item> </layer-list> ``` #### 四、如何操作Drawable实例 除了上述提到的各种特定类型的Drawable之外,在实际编码过程中还经常需要用到一些通用的方法来操控它们: - 获取当前状态对应的版本号:`getConstantState()` - 设置颜色过滤器改变外观表现:`setColorFilter(int color, PorterDuff.Mode mode)` - 调整大小尺寸适应容器空间:`setBounds(Rect bounds)` 或者 `setScaleX(float scaleX), setScaleY(float scaleY)` 对于更高级的应用场景,则可能涉及到了解并运用`LevelListDrawable`,`TransitionDrawable`,`InsetDrawable`等等更多种类的Drawable特性[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值