如何正确使用canvas.drawPicture()Android

时间:2015-11-10 16:08:58

标签: android android-layout android-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()方法,但这只是一个开始,看看我是否理解它是如何工作的。

1 个答案:

答案 0 :(得分:3)

  1. 屏幕上没有显示任何内容。为什么?
  2. 原因是ViewHardware accelerated。您需要有一个软件画布才能使用。你是怎样做的?将以下代码行添加到View

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

    现在它会起作用。同样位于drawText的坐标为(0,0)。文本从基线绘制,屏幕从(0,0)开始。因此,您可能需要尝试(0,50)之类的内容,以便在屏幕上呈现完整文本。

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

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

    但是,如果在硬件加速画布上创建Canvas.drawPicture(),则不会发生任何事情。图片从未被绘制过。

    然而,

    API23会删除此限制并允许在硬件加速画布上绘制