如何正确使用 canvas.drawPicture() Android
How to use canvas.drawPicture() properly Android
我无法在搜索时找到如何使用 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() 方法,但这只是一个开始,看看我是否理解它是如何工作的。
- 屏幕上没有任何显示。为什么?
这是因为您的 View
是 Hardware accelerated
。你需要有一个软件 canvas 才能工作。你是怎样做的?将以下代码行添加到 View
.
的构造函数中
setLayerType(LAYER_TYPE_SOFTWARE,null);
现在可以了。同样在您的 drawText
中,坐标是 (0,0)
。文本从基线开始绘制,屏幕从 (0,0)
开始。所以你可能想尝试 (0,50)
之类的东西,或者在屏幕上呈现完整的文本。
更多信息:
您可以通过两种方法将图片绘制到Canvas
。 Canvas.drawPicture()
或 Picture.draw()
。请务必注意,在这两种情况下,您都需要一个软件 canvas。如果您尝试 Picture.draw(canvas)
并传入硬件加速 canvas,您将得到以下异常:
java.lang.IllegalArgumentException: Picture playback is only supported on software canvas.
但是,如果您在硬件加速 Canvas.drawPicture()
上设置 canvas,什么也不会发生。图从来不画。
API23 但是取消了这个限制并允许利用硬件加速 canvas
我无法在搜索时找到如何使用 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() 方法,但这只是一个开始,看看我是否理解它是如何工作的。
- 屏幕上没有任何显示。为什么?
这是因为您的 View
是 Hardware accelerated
。你需要有一个软件 canvas 才能工作。你是怎样做的?将以下代码行添加到 View
.
setLayerType(LAYER_TYPE_SOFTWARE,null);
现在可以了。同样在您的 drawText
中,坐标是 (0,0)
。文本从基线开始绘制,屏幕从 (0,0)
开始。所以你可能想尝试 (0,50)
之类的东西,或者在屏幕上呈现完整的文本。
更多信息:
您可以通过两种方法将图片绘制到Canvas
。 Canvas.drawPicture()
或 Picture.draw()
。请务必注意,在这两种情况下,您都需要一个软件 canvas。如果您尝试 Picture.draw(canvas)
并传入硬件加速 canvas,您将得到以下异常:
java.lang.IllegalArgumentException: Picture playback is only supported on software canvas.
但是,如果您在硬件加速 Canvas.drawPicture()
上设置 canvas,什么也不会发生。图从来不画。
API23 但是取消了这个限制并允许利用硬件加速 canvas