Как сохранить объекты, ранее нарисованные на холсте при перерисовке?

#java #android #graphics #android-canvas #android-bitmap

#java #Android #графика #android-холст #android-растровое изображение

Вопрос:

Каждый раз, когда перерисовывается SurfaceView, объекты, которые были ранее нарисованы, стираются. Как мне сохранить их состояние, чтобы мой цикл добавлял новые объекты на экран, не стирая старые?

Ответ №1:

Рисуйте с помощью 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);
}
 

Таким образом, «mDrawBitmap» всегда будет содержать текущее нарисованное состояние. Если вы хотите, вы можете очистить его, вызвав mBitmapCanvas.drawColor(Color.WHITE);

Комментарии:

1. точно так же, только этот код будет выполняться не в onDraw(), а в методе run() потока.