想象一下,我有一个位图,我需要在上面绘制。为此,我需要将其包装在画布中。
我可以如下包装吗:
Bitmap mBitmap;
public void drawDrawable(Drawable d){
d.draw(new Canvas(mBitmap));
}
public void drawListOfPathsInRed(List<Path> list){
Paint paint = new Paint();
for(Path path : list)
new Canvas(mBitmap).drawPath(path, paint);
}
那有多糟?创建许多画布是否有任何明显的开销或其他问题?
答案 0 :(得分:2)
Canvas
本身并不是什么大问题,它是一个相当“轻”的对象,但是当我们谈论绘图时,我们确实需要我们可以获得的每一点性能(此处提供更多信息:{{3 }})。为此,您可以将Canvas
创建的内容移到绘图方法之外,并使用setBitmap
方法重复使用它:
Bitmap mBitmap;
Canvas mCanvas = Canvas();
Paint mPaint = new Paint(); // You should also reuse your Paint object
public void drawDrawable(Drawable d) {
mCanvas.setBitmap(mBitmap);
d.draw(mCanvas);
}
public void drawListOfPathsInRed(List<Path> list){
canvas.setBitmap(mBitmap)
for (Path path : list) {
canvas.drawPath(path, paint);
}
}
要更进一步,您还可以在设置mCanvas.setBitmap
变量之后立即进行操作,从而从绘制步骤中提取对mBitmap
的调用。