как сохранить то что нарисовано на Canvas в андроид, и нарисовать его снова


пишу рисовалку, пока что рисую только Path, есть функционал с помошью Spinner устанавливать толщину и цвет линии. при рисовании следующей path и смене цвета или толщины меняется и у первой. я так понимаю нужно сохранять состояние Canvas после каждого рисования. как это делается?
    public class CustomView extends View {

    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private Path path = new Path();
    private float x = -1;
    private float y = -1;
    private Bitmap bm;

    public CustomView(Context context) {
        super(context);
    }
    public CustomView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }
    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setStyle(Paint.Style.STROKE);        
        canvas.drawPath(path,paint);
    }
    public void setStrokeWidth(int strokeWidth) {
        paint.setStrokeWidth(strokeWidth);
    }
    public void setColor(int color) {
        paint.setColor(color);
    }
    public void setStyle(Paint.Style style){
        paint.setStyle(style);
    }
    private void startMove(float x, float y){
        path.moveTo(x, y);
        invalidate();
    }
    private void move(float x, float y){
        path.lineTo(x, y);
        invalidate();
    }
    private void endMove(){      
        invalidate();
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float eventX = event.getX();
        float eventY = event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startMove(eventX, eventY);
                break;
            case MotionEvent.ACTION_MOVE:
                move(eventX, eventY);
                break;
            case MotionEvent.ACTION_UP:
                endMove();
                break;
        }
        return true;
    }
}

Ответы (0 шт):