Canvas 物品有多一次性?
How disposable are Canvas objects?
假设我有一个位图,我需要在上面绘图。为此,我需要将它包装在 Canvas.
中
可以这样包装吗:
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);
}
那会有多糟糕?创建许多 Canvases 或任何其他问题是否有明显的开销?
Canvas
本身没什么大不了的,它是一个漂亮的 "light" 对象,但是当我们谈论绘图时,我们确实需要我们可以获得的每一点性能(更多信息在这里: Optimizing the view)。为此,您可以将 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);
}
}
要更进一步,您还可以在设置 mBitmap
变量后立即从绘图步骤中提取对 mCanvas.setBitmap
的调用。
假设我有一个位图,我需要在上面绘图。为此,我需要将它包装在 Canvas.
中可以这样包装吗:
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);
}
那会有多糟糕?创建许多 Canvases 或任何其他问题是否有明显的开销?
Canvas
本身没什么大不了的,它是一个漂亮的 "light" 对象,但是当我们谈论绘图时,我们确实需要我们可以获得的每一点性能(更多信息在这里: Optimizing the view)。为此,您可以将 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);
}
}
要更进一步,您还可以在设置 mBitmap
变量后立即从绘图步骤中提取对 mCanvas.setBitmap
的调用。