我理解如何绘制我的形状,我正在扩展View
类,并覆盖onDraw
,在那里我创建一个新的ShapeDrawbale
(矩形),然后我将其绘制到画布:
Rect rect = new Rect(x, y, x + width, y + height);
shapeDrawable.setBounds(rect);
shapeDrawable.getPaint().set(paint);
shapeDrawable.draw(canvas);
然后我想将它添加到我的Activities布局xml中定义的视图中。 我这样做是通过获取视图的句柄并调用:
innerLinear.addView(rectView); // where rectView is my custom class that extends View
我的问题是,在创建矩形时,您必须提供X
和Y
坐标。
那么 - 如何在innerLayout
?
我是否使用innerLayout
的边界来创建矩形?如果是这样,当我调用innerLayout.getLeft()
或innerLayout.getTop()
等时。总是返回0(我认为布局尚未完全完成),那么我该如何做呢?
还有其他方法吗? 我觉得我在这里遗漏了一些非常基本的东西。
非常感谢任何帮助,
感谢
答案 0 :(得分:2)
在onDraw
方法中,您可以使用以下apis:
对于x和y,参考点相对于父视图为0,0。
getWidth() // This is in View
getHeight() // This is in View
当您在CustomView
中拨打上述api时,您将获得父视图的正确尺寸,在您的情况下为innerLayout
。现在,如果我必须覆盖所有区域,我会写下这样的内容:
Rect rect = new Rect(0, 0, getWidth(), getHeight());
这将完全填满您的CustomView
。如何将0,0映射到实际的屏幕坐标,你不用担心它。正如我所提到的,您的视图的参考点是0,0。 Android会计算实际的屏幕坐标。
进一步参考: