大家好,我想知道是否可以绘制到屏幕外的Canvas/位图并利用硬件加速,还是我必须在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()
返回true。有没有一种方法可以利用硬件加速来绘制位图?还是我必须使用onDraw方法直接绘制到屏幕上?谢谢您的帮助:)我知道在Java中我可以在屏幕外绘制BufferedImage,它将通过硬件加速,但也许在手机上不一样...
最佳答案
因为在第一种情况下,您创建 Canvas ,所以它没有硬件层的备份。
另外,到目前为止,您不能仅在任何Canvas上启用HWA,它必须属于HWA View 。
另一方面, View 可以访问系统的硬件功能。您可以按照docs中所述通过调用setLayerType( LAYER_TYPE_HARDWARE)
来使用它:
同样,性能方面的关注更多地应用于渲染部件,而更少地应用于绘图。所有绘制操作都记录为图片对象。它的渲染操作在HWA中起着重要作用。