更好的帧速率绘制画布中的位图(第2部分)?

时间:2011-06-01 18:29:26

标签: android animation opengl-es bitmap live-wallpaper

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

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

  1. 明显的策略:每帧加载每个位图并绘制它。这很慢。
  2. 使用缓存。我将位图加载放在一个单独的线程中。大约20个位图的缓存在后台持续加载。但是,我仍然表现不佳(约10 fps)。罪魁祸首是缓慢的位图加载。
  3. 我打算尝试使用OpenGL但后来我意识到即使使用OpenGL,缓慢的位图加载仍然是个问题。对? (或者我错了?)
  4. 那么我可以使用其他策略吗?

    这就是我的想法:如果我使用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是旋转和缩放矩阵。

1 个答案:

答案 0 :(得分:1)

你要做的事情(即全帧动画)并不容易。几乎所有Android动画(从SDK中的Lunar Lander示例到愤怒的小鸟)都包含在相对静态的背景上移动小精灵。

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