Android Canvas和硬件加速?

时间:2013-02-09 04:46:40

标签: android ondraw hardware-acceleration

大家好,我想知道是否可以绘制到屏幕外的Canvas / Bitmap并利用硬件加速,或者我是否必须在onDraw()的{​​{1}}方法中绘制

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

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); 返回false并且绘图与以下相比迟缓:

canvas.isHardwareAccelerated()

其中protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawLine(0, 0, 100, 100, paint); } 返回true。有没有办法在利用硬件加速的同时绘制到位图?或者我是否必须直接在onDraw方法中绘制屏幕?

感谢您的帮助:)我知道在Java中,我可以在屏幕外绘制一个BufferedImage,它将是硬件加速但可能在手机上不一样......

1 个答案:

答案 0 :(得分:1)

因为在第一种情况下,您创建画布,它不会由硬件层备份。 此外,截至目前,您无法在任何Canvas上启用HWA,它必须属于HWA视图。

另一方面,视图可以访问系统的硬件功能。您可以按照文档:

中的说明调用setLayerType( LAYER_TYPE_HARDWARE)来使用它
  

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

此外,性能问题更多地适用于渲染部分,而不是绘制。所有绘制操作都记录为Picture对象。它是HWA扮演重要角色的渲染操作。