如何正确使用 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() 方法,但这只是一个开始,看看我是否理解它是如何工作的。

  1. 屏幕上没有任何显示。为什么?

这是因为您的 ViewHardware accelerated。你需要有一个软件 canvas 才能工作。你是怎样做的?将以下代码行添加到 View.

的构造函数中
 setLayerType(LAYER_TYPE_SOFTWARE,null);

现在可以了。同样在您的 drawText 中,坐标是 (0,0)。文本从基线开始绘制,屏幕从 (0,0) 开始。所以你可能想尝试 (0,50) 之类的东西,或者在屏幕上呈现完整的文本。

更多信息:
您可以通过两种方法将图片绘制到CanvasCanvas.drawPicture()Picture.draw()。请务必注意,在这两种情况下,您都需要一个软件 canvas。如果您尝试 Picture.draw(canvas) 并传入硬件加速 canvas,您将得到以下异常:

java.lang.IllegalArgumentException: Picture playback is only supported on software canvas.

但是,如果您在硬件加速 Canvas.drawPicture() 上设置 canvas,什么也不会发生。图从来不画。

API23 但是取消了这个限制并允许利用硬件加速 canvas