画布对象的抛弃性如何?

时间:2018-10-31 10:44:17

标签: android android-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);
}

那有多糟?创建许多画布是否有任何明显的开销或其他问题?

1 个答案:

答案 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的调用。