0

这就是我想要做的事情:我正在尝试加载一系列位图来显示动画。这意味着我需要下降 fps(24 fps)。我需要加载不超过 10 秒的动画或大约 300 个位图。由于它是动态壁纸,因此我仅限于手动绘制每一帧。

这是我到目前为止所尝试的:

  1. 显而易见的策略:每帧加载每个位图并绘制它。这很慢。
  2. 使用缓存。我将位图加载放在一个单独的线程中。大约 20 个位图的缓存在后台持续加载。但是,我的性能仍然很差(大约 10 fps)。罪魁祸首是位图加载缓慢。
  3. 我打算尝试使用 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是旋转和缩放矩阵。

4

1 回答 1

1

您正在尝试做的事情(即全帧动画)并不容易。几乎所有的 Android 动画(从 SDK 中的月球着陆器示例到愤怒的小鸟)都包含在相对静态的背景上移动小精灵。

解决您的问题的“明显”解决方案是将您的动画转换为 mpeg,然后将其解码为视频动态壁纸,复制此人在此处采用的方法:http: //forum.xda-developers.com/showthread。 php?t=804720(替代链接http://android.ccpcreations.com/vlw/

于 2011-06-01T20:28:20.297 回答