The problem is that you are also resizing the canvas, so after zooming 2 times, its size is 10000px * 10000px, meaning 100 megapixels, and several hundred megabytes of memory required.
If you keep the canvas size constant (like this), or limit it to a value small enough, zooming works as expected.
To keep the size constant you just have to remove these two lines:
canvas.setHeight(canvas.getHeight() * SCALE_FACTOR);
canvas.setWidth(canvas.getWidth() * SCALE_FACTOR);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…