我无法在搜索时找到如何使用canvas.drawPicture()
的可行示例。这个实现来自我对Android文档的理解,尽管那里的信息很少。
这是我当前的onDraw()实现:
protected void onDraw(Canvas canvas) {
Picture p = new Picture();
Canvas pCanvas = p.beginRecording(200,200);
TextPaint tPaint = new TextPaint();
pCanvas.drawText("Hello!",0,0,tPaint);
p.endRecording();
//now draw the picture
canvas.drawPicture(p);
}
屏幕上没有显示任何内容。
我理解这个例子很无用。理想情况下,我会在后台绘制图片并将其传递给onDraw()方法,但这只是一个开始,看看我是否理解它是如何工作的。
答案 0 :(得分:3)
原因是View
为Hardware accelerated
。您需要有一个软件画布才能使用。你是怎样做的?将以下代码行添加到View
。
setLayerType(LAYER_TYPE_SOFTWARE,null);
现在它会起作用。同样位于drawText
的坐标为(0,0)
。文本从基线绘制,屏幕从(0,0)
开始。因此,您可能需要尝试(0,50)
之类的内容,以便在屏幕上呈现完整文本。
更多信息:
您可以通过两种方法将图片绘制到Canvas
。 Canvas.drawPicture()
或Picture.draw()
。值得注意的是,在这两种情况下,您都需要一个软件画布。如果您尝试Picture.draw(canvas)
并传入硬件加速画布,您将获得以下异常:
java.lang.IllegalArgumentException: Picture playback is only supported on software canvas.
但是,如果在硬件加速画布上创建Canvas.drawPicture()
,则不会发生任何事情。图片从未被绘制过。
API23会删除此限制并允许在硬件加速画布上绘制