通过在我的XML 文件中使用,我将ImageView
一个图钉放置在布局的中心。android:layout_centerInParent="true"
RelativaLayout
现在我希望在画布上与图钉相同的位置绘制绿点。
注意:绿点不是视图。它是通过在画布上绘制的canvas.drawCircle();
也就是说,我必须以编程方式获取引脚的坐标。
那么我怎样才能得到android:layout_centerInParent="true"
代码的坐标呢?
通过在我的XML 文件中使用,我将ImageView
一个图钉放置在布局的中心。android:layout_centerInParent="true"
RelativaLayout
现在我希望在画布上与图钉相同的位置绘制绿点。
注意:绿点不是视图。它是通过在画布上绘制的canvas.drawCircle();
也就是说,我必须以编程方式获取引脚的坐标。
那么我怎样才能得到android:layout_centerInParent="true"
代码的坐标呢?
我的猜测是
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1);
您可以通过 获取 layoutParams ,并且在完成修改后relativeLayout.getLayoutParams()
不要忘记返回。setLayoutParams
要获取父级的宽度和高度,您可以执行此操作。
RelativeLayout parent = (RelativeLayout) findViewById(R.id.yourRelativeLayout);
int width = parent.getWidth();
int height = parent.getHeight();
然后你可以将这些数字除以 2 并将其设置为绿点的坐标,它应该出现在屏幕中间。为此,您的画布大小必须与相对布局相同。
但请注意,您需要在创建活动后调用getWidth()
和getHeight()
方法,否则您最终会得到零。看到这个答案
因此,您要绘制的画布位于 RelativeLayout 包含的视图中,但您想在 RelativeLayout 的中心绘制点?
是的,这正是我想要做的!
假设画布视图是 RealtiveLayout 的直接子级,这应该可以工作。
正如其他人提到的那样,您可以通过在布局上使用getWidth() / 2
和来获取布局的中心。getHeight() / 2
但是,您还必须弄清楚画布的原点在哪里。为此,您可以在画布视图上使用getLeft()和getTop() 。然后,您只需从左侧减去中心 x,从顶部减去中心 y 即可获得最终位置。
例子:
假设每条网格线是1
。是大的RelativeLayout
黑色矩形,Canvas
视图是蓝色的。中心点的坐标是4,6
。使用左/上,您可以获得1,4
画布原点(红点)。减去,你得到3,2
,这是绿点的局部画布坐标。
在画布中心绘制点应该只是将视图的宽度和高度除以二。如果您希望它位于引脚的底部(而不是真正的中心),则只需将引脚高度的一半添加到圆的y
值。