什么在程序上等同于RelativeLayout的android:layout_centerInParent =“true”?

时间:2013-07-15 01:53:14

标签: android android-layout android-canvas

我在ImageView XML文件中使用android:layout_centerInParent="true"在布局的中心放置RelativaLayout个图钉。

enter image description here

现在我希望将绿点绘制在与画布上的图钉相同的位置。

注意绿点不是视图。它在画布上由canvas.drawCircle();

绘制

也就是说,我必须以编程方式获取引脚的坐标。

那么如何使用代码获取android:layout_centerInParent="true"的坐标?

4 个答案:

答案 0 :(得分:2)

我的猜测是

layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1);

您可以按relativeLayout.getLayoutParams()获取layoutParams,并且在完成修改后不要忘记setLayoutParams

答案 1 :(得分:2)

要获得父级的宽度和高度,您可以执行此操作。

RelativeLayout parent = (RelativeLayout) findViewById(R.id.yourRelativeLayout);
int width = parent.getWidth();
int height = parent.getHeight();

然后你可以将这些数字除以2并将其设置为绿点的坐标,它应该出现在屏幕中间。为此,您的画布大小必须与相对布局相同。

但要注意,您需要在创建活动后调用getWidth()getHeight()方法,否则最终会得到零。 See this answer

答案 2 :(得分:1)

  

因此,您要绘制的画布位于RelativeLayout包含的视图中,但您想在RelativeLayout的中心绘制点?

     

是的,这正是我想要做的!

假设画布视图是RealtiveLayout的直接子视图,这应该可以。

您可以在布局上使用getWidth() / 2getHeight() / 2获取布局的中心,如其他人所述。但是,您还必须弄清楚画布的原点。为此,您可以在画布视图上使用getLeft()getTop()。然后你只需从左边减去中心x,从顶部中心y得到你的最终位置。

示例:

grid

假设每个网格线为1RelativeLayout是大黑色矩形,Canvas视图是蓝色矩形。中心点的坐标为4,6。使用left / top,您将获得画布原点(红点)的1,4。减去,得到3,2,这是绿点的本地画布坐标。

答案 3 :(得分:0)

在画布中心绘制点应该只是将视图的宽度和高度除以2。如果你想让它位于引脚的底部(而不是真正的中心),那么只需将引脚高度的一半加到圆的y值即可。