Android Rect对象中的top、left、right和bottom是什么意思?

62

我有一个Android项目,需要让苹果掉落。这些苹果被画在一个矩形中。因此,我创建了一个函数来改变矩形的位置并重新绘制。以下是我的函数:

private void updateApplesPosition() {
    for(Rect rect:fallingDownFruitsList)
        rect.set(rect.left, rect.top +10, rect.right, rect.bottom +10);
}
我有一个问题:苹果不掉落而是从右到左移动。为了让苹果掉落,我通过更改代码来实现了这个功能:

我有一个问题:苹果不掉落而是从右到左移动。为了让苹果掉落,我通过更改代码来实现了这个功能:

private void updateApplesPosition() {
    for(Rect rect:fallingDownFruitsList)
        rect.set(rect.left+10, rect.top, rect.right+10, rect.bottom);
}

3
使用 Rect.offset(dx, dy)。 (注:Rect.offset(dx, dy) 是一个方法,用于将矩形的位置沿着x轴和y轴分别移动dx和dy个单位。) - pskink
2
它们不会自己走,你需要绘制它们,而且错误就在那里。 - pskink
“Rect” 运行良好,因此问题在于您如何绘制它们。 - Simon
3个回答

223
以下图片将详细说明:

enter image description here

left 左侧矩形的 X 坐标

top 矩形顶部的 Y 坐标

right 矩形右侧的 X 坐标

bottom 矩形底部的 Y 坐标

enter image description here


8
非常感谢@Log,我已经为了理解left、right和bottom这些术语纠结了两天。很遗憾安卓开发者文档对这个类的说明非常不清晰。 - Harisewak
@LOG_TAG:这些值是以像素还是整数为单位的? - Aniruddha
rect.top会给出像素值还是dp值? - Bhaumik Ghodasara
这些值以像素为单位。 - Abhriya Roy
注意:当你将一个Rect对象打印到Logcat控制台时,它会显示类似于"Rect(790, 960 - 831, 1025)"的内容。这些数字是像素坐标,表示为Rect(left, top - right, bottom)。请参考此处的信息:android.graphics.Rect.java -> toString() - undefined

3

来自文档

参数

left:矩形左侧的X坐标

top:矩形顶部的Y坐标

right:矩形右侧的X坐标

bottom:矩形底部的Y坐标


1
我已经阅读了文档,但为什么当我执行rect.top +10时,它会向左移而不是向下移? - Hunsu
@user230137 _setBounds(x-width/2, y-height/2, x+width/2, y+height/2)_,其中 int width = getWidth()/10;int height = getHeight()/10; - LOG_TAG
@adneal:这些值是以像素为单位的吗? - Aniruddha
@Aniruddha 是的,这些值是以像素为单位的。 - Mightian

1

添加关键信息。

文档说明:

请注意,右侧和底部坐标是排除在外的。

因此,如果您的矩形是位于10,10位置的单个像素

left = 10:矩形左侧的X坐标

top = 10:矩形顶部的Y坐标= 10

right = 11:矩形右侧的X坐标加一

bottom = 11:矩形底部的Y坐标加一

请注意,右侧和底部坐标是排除在外的。

getWidth方法声明如下

public final int width() { return right - left; }

这里将返回11-10 = 1,正如预期的那样。

https://developer.android.com/reference/android/graphics/Rect


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接