О, я также забыл упомянуть, что есть некоторые вещи onDraw, которые должны произойти. По сути, вы сохраняете счетчик индекса, вырезаете прямоугольник из растрового изображения и рисуете его из исходного прямоугольника в целевой прямоугольник на холсте.

я есть большая таблица спрайтов (3808x1632), состоящая из 42 кадров. Я бы представил анимацию с этими кадрами, и я использую поток, чтобы загрузить массив растровых изображений со всеми кадрами, с заставкой, ожидающей его окончания. Я не использую SurfaceView (и функцию рисования холста), я просто загружаю кадр за кадром в ImageView в моем основном макете. Мой подход похож наЗагрузка большого количества изображений из таблицы спрайтов Завершение фактически занимает почти 15 секунд, что недопустимо.

Я использую такую ​​функцию:

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 - это большая таблица спрайтов. Более подробно, я прочитал в logcat, что функция createBitmap занимает много времени, возможно, потому, что таблица спрайтов слишком велика. Я где-то обнаружил, что могу создать окно на большой таблице спрайтов, используя функцию rect и canvas, создавая небольшие растровые изображения для загрузки в массив, но это было не совсем понятно. Я говорю об этом посте:вырезать часть растрового изображения

Мой вопрос: как я могу ускорить вырезание спрайт-листа?

Изменить: я пытаюсь использовать этот подход, но я не вижу окончательную анимацию:

    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);
    }

Вероятно, Bitmap bmFrame не правильно управляется.

Ответы на вопрос(4)

Ваш ответ на вопрос