О, я также забыл упомянуть, что есть некоторые вещи 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 не правильно управляется.