gpt4 book ai didi

Android 在 ImageView 中加载和显示大量图像(逐帧动画)在某些时刻挂起

转载 作者:行者123 更新时间:2023-11-30 04:53:12 24 4
gpt4 key购买 nike

我创建了一个在 ImageView 中显示大约 250 张图像的应用程序。图像一个接一个地加载,每秒 15-30 张图像。基本上整个事情给人一种旋转 3D 对象的错觉,至少它应该如此。接下来的问题是,应用程序在加载某些图像时挂起(即我看到几秒钟的流畅动画,然后动画挂起,向前跳 10-15 帧(图像)并继续。它总是发生在动画周期的相同位置。我虽然 Android 可能没有足够的资源来处理这样的事情,所以我将图像的大小调整为它们的一半,但它没有帮助。我试过缓冲图像,但这也没有帮助(实际上,也许有一点,我认为动画看起来更流畅一点)。现在最奇怪的是。我使用触摸屏允许用户“旋转”这些图像上的 3D 对象,并且在旋转时我再次体验到那些与动画完全相同的位置的悬挂。

所有图片均为 .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();

最佳答案

首先,15-40KB是它们的压缩形式。未压缩时,作为 Bitmaps,它们可能要大得多。其中 250 个可能正在使用许多 MB 的 RAM,这不是一个好主意。

其次,如果选择使用 OpenGL 进行 3D(这是它的目的),或 Canvas 上的 2D 绘图基元,或使用 ImageView,您选择表现最差的选项。

第三,postRunnable() 不会立即生效,而是将事情放在消息队列中,以便主应用程序线程在有机会时进行处理。如果它被束缚——比如说,处理触摸事件——它可能会跳过一些看似多余的 ImageView 重绘,或者让它们过得如此之快以至于它们似乎没有发生。所有 40 毫秒 wait() 所做的只是确保您每 40 毫秒仅引发一次事件,而不是它们将每 40 毫秒绘制。此外,您可以更轻松地使用 postDelayed() 进行 40 毫秒计时。

关于Android 在 ImageView 中加载和显示大量图像(逐帧动画)在某些时刻挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com