Spritesheet de corte programático: mejores prácticas

Tengo una gran hoja de sprites (3808x1632) compuesta por 42 cuadros. Presentaría una animación con estos cuadros y uso un hilo para cargar una matriz de mapa de bits con todos los cuadros, con una pantalla de inicio esperando su final. No estoy usando un SurfaceView (y una función de dibujo de un lienzo), solo cargo cuadro por cuadro en un ImageView en mi diseño principal. Mi enfoque es similar aCargando una gran cantidad de imágenes desde una hoja de sprites La finalización en realidad lleva casi 15 segundos, no es aceptable.

Uso este tipo de función:

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 es la gran hoja de sprites. Mirando más profundamente, he leído en el logcat que la función createBitmap lleva mucho tiempo, tal vez porque la hoja de sprites es demasiado grande. Encontré en algún lugar que podía hacer una ventana en la gran hoja de sprites, usando la función rect y el lienzo, creando pequeños mapas de bits para cargar en la matriz, pero no estaba realmente claro. Estoy hablando de esa publicación: cortar la parte del mapa de bits

Mi pregunta es: ¿cómo puedo acelerar el corte de la hoja de sprites?

Edit: estoy tratando de usar este enfoque pero no puedo ver la animación 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);
    }

Probablemente, el Bitmap bmFrame no se gestiona correctamente.

Respuestas a la pregunta(4)

Su respuesta a la pregunta