IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Rect相关方法 -> 正文阅读

[移动开发]Android Rect相关方法

1.Rect

常用的一个“绘画相关的工具类”,常用来描述长方形/正方形,他只有4个属性:

? ? public int left;

? ? public int top;

? ? public int right;

? ? public int bottom;

这4个属性描述着这一个“方块”,但是这有一个知识点需要理清楚,先看这张图

9d702355a2cc419e8feb3934f60b0fc8.png

本Rect最左侧到屏幕的左侧的距离是 left?

本Rect最上面到屏幕上方的距离是 top?

本Rect最右侧到屏幕左侧的距离是 right?

本Rect最下面到屏幕上方的距离是 bottom

这四个属性不单单描述了这个长方形4个点的坐标,间接的描述出这个长方形的尺寸:

长 = bottom - top?

宽 = right - left

?

2.常用方法

①public final boolean isEmpty ()? 如果矩形为空,则返回true(left >= right 或 top >= bottom)

public void setEmpty ()? 将矩形设置为(0,0,0,0)(left, top, right, bottom)

public final int height () 返回矩形的高度(这没有检查一个有效的矩形;即top <= bottom),所以结果可能是负的

public final int width () 返回矩形的宽度(这没有检查一个有效的矩形即left<=right),所以结果可能是负的

public String flattenToString () 返回矩形的字符串表示形式(左上右下)

public final int centerX ()? 获取矩阵中心点X轴上的坐标;如果值是小数,则返回小于值的最大整数(返回int类型)

public final int centerY () 获取矩阵中心点Y轴上的坐标;如果值是小数,则返回小于值的最大整数(返回int类型)

public boolean contains (int x, int y)如果(x,y)在矩形内,则返回true。注意:左侧和顶部被认为是内部,而右侧和底部则不是。x,y被包含:left<= x <right和top<= y <bottom(空矩形不包含任何点)

public boolean contains (int left, int top, int right, int bottom) 如果矩形的4条指定边在该矩形或等于该矩形,则返回true。注意:一个空矩形永远不会包含另一个矩形

public boolean contains (Rect r) 如果指定的矩形r在该矩形内或等于该矩形,则返回true。注意:一个空矩形永远不会包含另一个矩形

public boolean equals (Object o) 比较此实例与指定对象,并指示它们是否相等。如果指定的对象等于此对象,则为true;否则返回false

public void inset (int dx, int dy) 在矩形中插入(dx,dy)。dx/dy是正的,两边向内移动(使矩形变窄);dx/dy是负的,两边向外移动(使矩形变宽)

public boolean intersects (int left, int top, int right, int bottom) 如果此矩形与指定矩形相交,则返回true。注意:这个矩形在任何情况下都不会被修改;不执行检查矩形是否为空的操作;要记录交集,请使用intersect()/setIntersect()

public static boolean intersects (Rect a, Rect b) 如果两个指定矩形相交,则返回true。注意:在任何情况下,这两个矩形都不会被修改。

public boolean intersect (Rect r) 如果指定的矩形与此矩形相交,则返回true并将此矩形设置为该交集,否则返回false且不更改此矩形。注意:要测试交集,请使用intersects()

boolean setIntersect( Rect a, Rect b) 如果矩形a和b相交,返回true并将该矩形设置为该相交,否则返回false且不改变该矩形。注意:不执行检查矩形是否为空的操作;要测试交集,请使用intersects()

public void offset (int dx, int dy) 通过在X轴和Y轴上设置偏移量去移动矩形,也就是矩形的left和right坐标上加上dx,在top和bottom坐标上加上dy来偏移矩形

public void offsetTo (int newLeft, int newTop) 将矩形偏移到一个指定的位置(左上角),保持它的宽度和高度相同

public void set (int left, int top, int right, int bottom) 将矩形的坐标设置为指定值。注意:没有执行范围检查,确保left <= right和top <= bottom。

public void set (Rect src) 从src复制坐标到这个矩形中

public void sort () 如果可以翻转(即左>右和/或顶部>底)交换顶部/底部或左/右。注意: 如果边缘已经正确(即左<=右和顶<=底),则不执行任何操作

public void union (int left, int top, int right, int bottom) 更新此矩形为指定的矩形。注意: 如果指定的矩形为空,则不执行任何操作; 如果自身矩形为空,则将其设置为指定的矩形

void union( Rect r) 更新此矩形为指定的矩形。注意: 如果指定的矩形为空,则不执行任何操作; 如果自身矩形为空,则将其设置为指定的矩形

void union (int x, int y) 更新这个矩形,以包含它自己和[x,y]坐标。注意: 没有检查该矩形是否为非空

?

2.检测矩形是否相交

矩形的Rect.intersect(Rect a)方法是用来取两个矩形的相交部分,并设置给Rect。

@CheckResult

public boolean intersect(int left, int top, int right, int bottom) {

? ? if (this.left < right && left < this.right && this.top < bottom && top < this.bottom) {

? ? ? ??if (this.left < left) this.left = left;

? ? ? ??if (this.top < top) this.top = top;

? ? ? ? if (this.right > right) this.right = right;

? ? ? ? if (this.bottom > bottom) this.bottom = bottom;

? ? ? ? return true;

? ??}

? ? return false;

}

?

静态方法检测矩形是否相交:

public static boolean intersects(Rect a, Rect b)

实例变量检测是否相交:

public boolean intersect(Rect r)

实例变量和静态变量检测是否相交的区别在于,实例变量检测是否相交并不会把相交矩形返回,而实例变量则会矩形返回。

举个例子:

原图,相交的两个矩形(rect_1、rect_2):

14bf87760895410293efb7c5deee5791.png

?当调用rect_1.intersect(rect_2)后,则rect_1变成下图中绿色矩形:

2580a6d23e7145d7aa4992e1a92a4b86.png

?

3.合并矩形

public void union(Rect r)

取矩形最小左上角,最大右下角点为基准,绘制矩形。效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2f6Iqz6Iqz,size_7,color_FFFFFF,t_70,g_se,x_16

?

?

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:41:17  更:2022-03-10 22:43:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:11:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码