问题
Every time a SurfaceView is redrawn, things that were previously drawn are erased. How do I save their state so that my loop will add new objects to the screen without erasing the old ones?
回答1:
Draw with a Bitmap
:
Bitmap mDrawBitmap;
Canvas mBitmapCanvas;
Paint mDrawPaint = new Paint();
@Override
public void onDraw(Canvas canvas) {
if (mDrawBitmap == null) {
mDrawBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
mBitmapCanvas = new Canvas(mDrawBitmap);
}
// draw on the btimapCanvas
//... and more
mBitmapCanvas.drawWhatever(...);
// after drawing with the bitmapcanvas,
//all drawn information is stored in the Bitmap
// draw everything to the screen
canvas.drawBitmap(mDrawBitmap, 0, 0, mDrawPaint);
}
In that way, "mDrawBitmap" will always contain the currently drawn state. If you want to, you can clear it by calling mBitmapCanvas.drawColor(Color.WHITE);
来源:https://stackoverflow.com/questions/24376122/how-to-save-objects-previously-drawn-to-the-canvas-on-a-redraw