我了解如何绘制形状,正在扩展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(我认为布局尚未完全完成),那么该怎么办?

还有另一种方法吗?
我觉得这里缺少一些基本的东西。

任何帮助将不胜感激,

谢谢

最佳答案

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

对于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

10-01 12:07