У меня есть большая таблица спрайтов (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, создавая маленькие растровые изображения для загрузки в массив, но это не совсем понятно. Я говорю об этом посте: вырезать часть растрового изображения
У меня вопрос: как я могу ускорить вырезание таблицы спрайтов?
Edit:
Я пытаюсь использовать этот подход, но не вижу окончательной анимации:
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);
}
Возможно, растровое изображение bmFrame неправильно управляется.