如何在Android中绘制一个给定大小的Rectangle,它将自己定位在添加它的视图中?

时间:2011-12-05 01:05:07

标签: android layout graphics shapedrawable

我理解如何绘制我的形状,我正在扩展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

我的问题是,在创建矩形时,您必须提供XY坐标。

那么 - 如何在innerLayout

中正确定位rectanlge

我是否使用innerLayout的边界来创建矩形?如果是这样,当我调用innerLayout.getLeft()innerLayout.getTop()等时。总是返回0(我认为布局尚未完全完成),那么我该如何做呢?

还有其他方法吗? 我觉得我在这里遗漏了一些非常基本的东西。

非常感谢任何帮助,

感谢

1 个答案:

答案 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会计算实际的屏幕坐标。

进一步参考:

Custom Components

How Android draws