2

我了解如何绘制我的形状,我正在扩展View类,并覆盖onDraw我在其中创建一个新的ShapeDrawbale(矩形),然后将其绘制到画布上:

    Rect rect = new Rect(x, y, x + width, y + height);
    shapeDrawable.setBounds(rect);
    shapeDrawable.getPaint().set(paint);
    shapeDrawable.draw(canvas);

然后我想将此添加到我的活动布局 xml 中定义的视图中。我通过获取视图句柄并调用来做到这一点:

innerLinear.addView(rectView); // where rectView is my custom class that extends View

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

那么 - 如何让矩形正确定位在innerLayout?

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

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

任何帮助将不胜感激,

谢谢

4

1 回答 1

2

在该onDraw方法中,您可以使用以下 api:

对于 x 和 y,参考点相对于父视图为 0,0。

getWidth() // This is in View
getHeight() // This is in View

当您在您的上面调用 apis 时,您CustomView将获得父视图的正确尺寸,在您的情况下是innerLayout. 现在,如果我必须涵盖所有区域,我将编写如下内容:

Rect rect = new Rect(0, 0, getWidth(), getHeight());

这将CustomView完全填满你的。你的 0, 0 如何映射到实际的屏幕坐标,你不用担心。正如我所提到的,您的视图的参考点是 0,0。Android 会计算实际的屏幕坐标。

如需进一步参考:

自定义组件

Android 是如何绘图的

于 2011-12-05T07:10:50.620 回答