大家好,我想知道是否可以绘制到屏幕外的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,它将是硬件加速但可能在手机上不一样......
答案 0 :(得分:1)
因为在第一种情况下,您创建画布,它不会由硬件层备份。 此外,截至目前,您无法在任何Canvas上启用HWA,它必须属于HWA视图。
另一方面,视图可以访问系统的硬件功能。您可以按照文档:
中的说明调用setLayerType( LAYER_TYPE_HARDWARE)
来使用它
表示视图具有硬件层。硬件层是 由硬件特定纹理(通常为帧缓冲对象)支持 或OpenGL硬件上的FBO)并导致视图使用 Android的硬件渲染管道,但仅限于硬件 为视图层次结构打开加速。当硬件 加速关闭,硬件层的行为与软件完全相同 层。
此外,性能问题更多地适用于渲染部分,而不是绘制。所有绘制操作都记录为Picture对象。它是HWA扮演重要角色的渲染操作。