Как сказано в комментарии, вы не присоединяете Canvas2 ни к чему. Вы создаете его каждый кадр (что плохо), рисуете на нем, а затем позволяете ему выйти за рамки возможного сбора мусора. Что вы должны сделать, это создать Canvas2 с поддержкой Bitmap в конструкторе вашего представления и сохранить его как член. Затем вы можете нарисовать его, а затем перетащить его растровое изображение в Canvas1. Например:
public MyCustomView(Context context)
{
super(context);
_canvas2 = new Canvas(_backingBitmap);
}
public void onDraw(Canvas canvas1)
{
Bitmap graphic1 = BitmapFactory.decodeResource(getResources(), R.drawable.graphic1);
Bitmap graphic2 = BitmapFactory.decodeResource(getResources(), R.drawable.graphic2);
canvas1.drawBitmap(
top,
new Rect(0, 0, graphic1.getWidth(), graphic1.getHeight()),
new Rect(0, 0, width, width),
null);
_canvas2.drawBitmap(
top,
new Rect(0, 0, graphic2.getWidth(), graphic2.getHeight()),
new Rect(0, 0, width, width),
null);
canvas1.drawBitmap(
top,
new Rect(0, 0, _backingBitmap.getWidth(), _backingBitmap.getHeight()),
new Rect(0, 0, width, width),
null);
}