Android如何控制View位置?

时间:2013-05-22 00:29:14

标签: android graphics view coordinates move

根据View类的文档:

  

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

     

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

     

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

我对上述的解释是,View的位置由其“Left”和“Top”值控制,而其宽度和高度由“Width”和“Height”值控制。考虑到最后一句,其中“右”是派生的,通过添加左边和宽度,这似乎特别清楚。

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

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

编辑:我添加了RelativeLayout:

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

...以屏幕为中心创建View 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已经为零,但我想尝试一下以防万一有魔法隐藏在这里。

其他建议?

0 个答案:

没有答案