Вот что я пытаюсь сделать: я пытаюсь загрузить последовательность растровых изображений для отображения анимации. Это означает, что мне нужно иметь спуск кадров в секунду (24 кадра в секунду). Мне нужно загрузить не более 10 секунд анимации или около 300 растровых изображений. А так как это живые обои, я ограничен рисованием каждого кадра вручную.
Вот что я попробовал:
- Очевидная стратегия: загружать каждое растровое изображение каждый кадр и рисовать его. Это медленно.
- Используйте кеширование. Я помещаю растровую загрузку в отдельный поток. Кэш около 20 битовых карт постоянно загружается в фоновом режиме. Тем не менее, я все еще получаю плохую производительность (около 10 кадров в секунду). Виновником является медленная загрузка растровых изображений.
- Я собирался попробовать использовать OpenGL, но потом понял, что даже с OpenGL медленная загрузка растрового изображения все еще будет проблемой. Правильно? (Или я не прав?)
Так, какие еще стратегии я могу использовать?
Вот что я имел в виду: если я использую openGL, я могу использовать меньшие растровые изображения (потому что это дает лучшее масштабирование). Возможно, тогда у меня будет больший кеш - скажем, 3 секунды. С большим кешем медленная загрузка растрового изображения не будет проблемой, верно?
Какие-нибудь другие стратегии?
Да, и это моя текущая функция загрузки растровых изображений:
void loadNthBitmap(int i, int n) {
try {
buf = new
BufferedInputStream(assets.
open(folder+"/"
+imageList[n])
);
tmpBitmap = BitmapFactory.
decodeStream(buf);
rbitmap[i] = Bitmap.createBitmap
(tmpBitmap,
0,0,imageWidth,imageHeight,
transMatrix,false);
}
catch(IOException e) {}
}
, где imageList
- это заранее определенный список активов, а transMatrix
- матрица ротации и масштабирования.