Я создал приложение, которое показывает около 250 изображений в ImageView. Изображения загружаются одно за другим, 15-30 изображений в секунду. По сути, все это создает иллюзию вращающегося трехмерного объекта, по крайней мере, так и должно быть.
Проблема в следующем, приложение зависает при загрузке определенных изображений (т.е. я вижу несколько секунд плавной анимации, а затем анимация зависает, прыгает на 10-15 кадров (изображений) вперед и продолжается. Это всегда происходит в одних и тех же местах цикла анимации.
Я думал, что у Android может не хватить ресурсов для обработки чего-то подобного, поэтому я изменил размер изображения до половины их размера, но это не помогло. Я пробовал буферизовать изображения, но это тоже не помогло (на самом деле, возможно, немного, я думаю, что анимация выглядит немного более плавной).
А теперь самая странная вещь. Я использую сенсорный экран, чтобы позволить пользователям «вращать» трехмерный объект на этих изображениях, и во время вращения я снова испытываю эти зависания точно в тех же местах, что и при анимации.
Все изображения в формате .png, их размер варьируется от 15 кБ до 40 КБ.
Я использую следующий код для анимации:
new Thread(new Runnable() {
@Override
public void run() {
while (!stopStartupAnimation && li < images_360.length) {
final int fli = li;
handler.post(new Runnable() {
@Override
public void run() {
//Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
//imageCanvas.setImageResource(images_360[fli]);
imageCanvas.setImageBitmap(imageStackNext.pop());
System.out.println("rawX = " + fli);
}
});
int ti = fli +25;
if(ti > images_360.length-1){
ti = ti - images_360.length;
}
imageStackNext.push(BitmapFactory.decodeResource(getResources(), images_360[ti]));
synchronized (this) {
try {
wait(1000 / 25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
li++;
li++;
if (li >= images_360.length) {
li = 0;
}
}
}
}).start();