我创建了一个在ImageView中显示大约250个图像的应用程序。图像一个接一个地加载,每秒15-30幅图像。基本上整个事情给出了旋转3D对象的幻觉,至少它应该。 问题是接下来,加载某些图像(即我看到流畅的动画效果的几秒钟,然后动画挂起,跳10-15帧(图像)时,提前挂起应用程序和继续,它总是发生在动画周期同一个地方。 我认为,虽然Android的可能没有足够的资源来处理这样的事情,所以我调整图像一半大小,但我以前不帮助。我已经试过缓存图像但我以前不帮助任何(实际上,我认为动画看起来有点平滑) 现在是最奇怪的事情,我使用触摸屏让用户“旋转”这些图像上的3D对象,并在旋转的同时再次体验那些挂在与动画完全一样的地方Android加载并在ImageView中显示大量图像(逐帧动画)在特定时刻挂起
所有图像都是.png格式,其大小从15kB到40kB。
我用下面的代码为动画:
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();
图像并非一次全部加载,而是逐个加载。你对OpenGL的看法是正确的,但是将它用于这个应用程序会是一个矫枉过正的问题,因为我是动画的对象不是一个多维数据集或简单的东西,再加上它不仅仅是这个对象。 我知道postRunnable()不会立即生效,我试图用postDelayed(),但它会产生同样的效果。 – Milan 2010-02-19 00:11:02
此外,我已经写道,我已经尝试将图像大小调整为其大小的一半,并且它没有帮助。我一直没能说的是,当我使用触摸屏旋转3D对象(通过滑动触摸屏)不,如果我通过360' 或10' 挂起仍然存在正好旋转它没关系它们在动画中发生的位置相同。 – Milan 2010-02-19 00:11:45
“你说得对OpenGL的,但使用它为这个应用程序将是矫枉过正,因为对象我动画是不是一个立方体或简单的东西”那么,你的思维方式,以有效地实现一个不简单的3D动画是避免使用3D硬件加速技术并使用性能较差的替代方案? “我知道postRunnable()不会立即生效,我试图使用postDelayed(),但它产生相同的效果。”当然,它会 - 他们都将事件放在主线程队列中。这在使用小部件时是不可避免的,这就是为什么3D动画不应该使用小部件。 – CommonsWare 2010-02-19 01:15:00