Spritesheet programaticamente cortando: práticas recomendadas

Tenho uma grande planilha (3808x1632) composta por 42 quadros. Eu apresentaria uma animação com esses quadros e utilizaria um thread para carregar uma matriz de bitmap com todos os quadros, com uma tela inicial aguardando seu fim. Não estou usando um SurfaceView (e uma função de desenho de uma tela), apenas carrego quadro a quadro em um ImageView no meu layout principal. Minha abordagem é semelhante aCarregando um grande número de imagens de uma planilha A conclusão leva quase 15 segundos, não é aceitáve

Uso este tipo de função:

for (int i=0; i<TotalFramesTeapotBG; i++) {
            xStartTeapotBG = (i % framesInRowsTeapotBG) * frameWidthTeapotBG; 
            yStartTeapotBG = (i / framesInRowsTeapotBG) * frameHeightTeapotBG;
            mVectorTeapotBG.add(Bitmap.createBitmap(framesBitmapTeapotBG, xStartTeapotBG, yStartTeapotBG, frameWidthTeapotBG, frameHeightTeapotBG));
        }

framesBitmapTeapotBG é a grande planilha. Olhando mais profundamente, li no logcat que a função createBitmap leva muito tempo, talvez porque a planilha seja muito grande. Encontrei em algum lugar que era possível criar uma janela na grande planilha, usando a função rect e canvas, criando pequenos bitmaps para serem carregados na matriz, mas não estava muito claro. Eu estou falando sobre esse post: corta a parte do bitmap

Minha pergunta é: como acelerar o corte da planilh

Edit: Estou tentando usar essa abordagem, mas não consigo ver a animação final:

    for (int i=0; i<TotalFramesTeapotBG; i++) {
        xStartTeapotBG = (i % framesInRowsTeapotBG) * frameWidthTeapotBG; 
        yStartTeapotBG = (i / framesInRowsTeapotBG) * frameHeightTeapotBG;
        Bitmap bmFrame = Bitmap.createBitmap(frameWidthTeapotBG, frameHeightTeapotBG, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bmFrame); 
        Rect src = new Rect(xStartTeapotBG, yStartTeapotBG, frameWidthTeapotBG, frameHeightTeapotBG); 
        Rect dst = new Rect(0, 0, frameWidthTeapotBG, frameHeightTeapotBG);  
        c.drawBitmap(framesBitmapTeapotBG, src, dst, null);         
        mVectorTeapotBG.add(bmFrame);
    }

rovavelmente, o Bitmap bmFrame não é gerenciado corretament

questionAnswers(4)

yourAnswerToTheQuestion