首先,我创建了一个自定义视图,它通过覆盖onDraw()
方法来吸引自己。事实证明这是不切实际的,因为我需要创建大量的视图。所以我创建了一个自定义ViewGroup,使用onLayout()
方法绘制每个孩子的。
我在android文档中读到子视图应该实现layout()
方法。但是我创建的子视图使用onDraw方法绘制自己。我该怎么处理?我应该摆脱onDraw()
方法吗?并且有人能举例说明layout()
方法如何工作以及如何将onDraw()
方法“转换”为layout()
方法?
我当前的onDraw()
方法如下所示:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
//Draw Border.
canvas.drawRect(mCellBounds, mBorderPaint);
//Draw Background.
canvas.drawRect(mBackgroundBounds, mBackGroundPaint);
//Draw Value if not 0.
if(Value != 0)
canvas.drawText(Integer.toString(Value), ValueX, ValueY, mNumberPaint);
//Draw Notes if Value == 0.
else
{
for(int i = 0 ; i < 9 ; i++)
if(NoteList[i])
canvas.drawText(Integer.toString(i), NoteX + ((i%3) * NoteMeasureX), NoteY + ((i/3) * NoteMeasureY), mNotePaint);
}
}
答案 0 :(得分:5)
所以我创建了一个自定义ViewGroup,用它来绘制每个孩子的 onLayout()方法。
我看不到你如何用ViewGroup
方法绘制onLayout
个孩子。该方法应该用于将孩子放在屏幕上。
我在android文档中读到了子视图应该 实现layout()方法
该方法已经实现,您可以使用正确的值调用它,以便View
知道它应该放在屏幕上的哪个位置。
我应该摆脱onDraw()方法吗?
如果您想要实际看到某些内容,则不应忽略onDraw
方法。
并且有人能给我一个layout()方法如何工作的例子 以及如何将我的onDraw()方法“转换”为layout()方法?
您不会将onDraw
方法转换为layout
方法。例如,我制作了一个由自定义ViewGroup
和自定义子View
组成的小样本。自定义ViewGroup
它将放置两个(预期的孩子),如下图所示(每个孩子将有父母的宽度和高度的一半):
您可以找到示例here。我希望它对你有所帮助。
您还可以查看SDK布局的源代码(如简单的FrameLayout
),看看它们是如何发挥作用的。
答案 1 :(得分:1)
您真的需要整个视图层次结构吗? 考虑使用SurfaceView,这是一种更轻松的自定义绘图方式,并且可以在一个视图中轻松嵌入其他视图中。
另见我的回答here。