7

大家好,我想知道是否可以绘制到屏幕外的画布/位图并利用硬件加速,或者我是否必须onDraw()View

例如,我通过执行以下操作绘制到屏幕外位图:

Bitmap.Config config = Bitmap.Config.ARGB_8888;
Bitmap buffer = Bitmap.createBitmap(200, 200, config);
Canvas canvas = new Canvas(buffer);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawLine(0, 0, 100, 100, paint);

然而canvas.isHardwareAccelerated(),与以下相比,返回 false 并且绘图缓慢:

protected void onDraw(Canvas canvas) {

    Paint paint = new Paint();
    paint.setColor(Color.RED);

    canvas.drawLine(0, 0, 100, 100, paint);
}

哪里canvas.isHardwareAccelerated()返回真。有没有办法在利用硬件加速的同时绘制位图?还是我必须在 onDraw 方法中直接绘制到屏幕上?

谢谢你的帮助:)我知道在Java中我可以画到屏幕外的BufferedImage,它会被硬件加速,但在手机上可能不一样......

4

1 回答 1

4

因为在第一种情况下,您创建了画布,它没有硬件层支持。此外,到目前为止,您不能在任何 Canvas 上启用 HWA,它必须属于 HWA 视图。

另一方面,视图可以访问系统的硬件功能。setLayerType( LAYER_TYPE_HARDWARE)您可以按照文档中的说明调用来使用它:

表示视图有硬件层。硬件层由特定于硬件的纹理(通常是帧缓冲区对象或 OpenGL 硬件上的 FBO)支持,并导致使用 Android 的硬件渲染管道渲染视图,但前提是为视图层次结构打开硬件加速。关闭硬件加速后,硬件层的行为与软件层完全相同。

此外,性能问题更多地应用于渲染部分,而不是绘图。所有绘制操作都记录为一个图片对象。它是 HWA 发挥重要作用的渲染操作。

于 2013-02-09T05:37:07.917 回答