我了解如何绘制形状,正在扩展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
我的问题是创建矩形时,必须提供
X
和Y
坐标。所以-如何使矩形正确放置在
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