0

根据 View 类的文档:

视图的几何形状是矩形的。视图有一个位置,表示为一对左坐标和上坐标,以及两个维度,表示为宽度和高度。位置和尺寸的单位是像素。

可以通过调用 getLeft() 和 getTop() 方法来检索视图的位置。前者返回代表视图的矩形的左坐标或 X 坐标。后者返回代表视图的矩形的顶部或 Y 坐标。

此外,还提供了几种方便的方法来避免不必要的计算,即 getRight() 和 getBottom()。这些方法返回代表视图的矩形的右边缘和下边缘的坐标。例如,调用 getRight() 类似于以下计算:getLeft() + getWidth()。

我对上面的解释是,视图的位置由它的“左”和“上”值控制,而它的宽度和高度由它的“宽度”和“高度”值控制。考虑到最后一句话,这似乎特别清楚,其中“右”是通过添加左和宽度得出的。

尽管如此,当我使用 setLeft() 和/或 setTop() 来更改视图的位置时,视图的大小会在屏幕上发生变化!同时,视图的右下角仍固定在其原始位置。这种行为意味着“Right”和“Bottom”是实际值,而不是文档中描述的派生值。

那么这里到底发生了什么?文档说一件事,但行为却说反了。重新定位视图的正确方法是什么?

编辑:我添加了一个相对布局:

myParams = new RelativeLayout.LayoutParams(300,300);
myParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
myParams.addRule(RelativeLayout.CENTER_VERTICAL);
myView.setLayoutParams(myParams);

...创建一个以屏幕为中心的 300x300 视图。完美运行。但是检查一下RelativeLayout,位置似乎是由leftMargin 和topMargin 控制的——但两者都为零!这引发了以下问题:1)如何检查 LayoutParams 以了解 View 现在的位置,以及 2)如何更改 LayoutParams 以将其移动到不同的位置?

编辑:作为一项实验,我在视图中添加了一个 onTouch 方法并在其中执行此操作(摘录):

if (MotionEvent.ACTION_MOVE == iAction) {
    myParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
    myParams.leftMargin = 0;
    myParams.topMargin = 0;
    v.setLayoutParams(myParams);
}

...理论上,我的垂直和水平居中的视图会移动到屏幕的左上角。结果:它根本不动。这并不奇怪,因为 .leftMargin 和 .topMargin 已经为零,但我想尝试一下,以防万一这里隐藏着一些魔法。

其他建议?

4

0 回答 0