加速Android drawRect调用

时间:2014-07-23 04:54:00

标签: android performance

我目前正在制作Android动态壁纸。在这个特殊的壁纸中,我有一个从使用触摸的位置生成的圆阵列。在应用程序的设置中,我将允许他们更改所述功能的分辨率,因为这与此有关。因此,我编写了自己的抗锯齿圆函数。

渲染是通过类似于粒子的效果完成的 - 我计算了我用圆圈传过来的矩形的颜色,并相应地渲染它们。这些矩形为我存储值,所以我需要单独渲染每个值。我已尽我所能加快速度 - 预先计算各种颜色的Paint对象(足够少,这是有效且仍然有效),预先计算矩形'然而,我仍然在渲染循环中失去速度 - 一个简单的循环遍历任何着色的矩形并将其应用于屏幕。

我没有操作但是比较矩形是否有颜色,并且矩形的值直接拉出要从数组中使用的Paint对象。我怎样才能在这里获得速度?我无法将分辨率提高到填充屏幕的16像素正方形,而不会变得难以忍受地慢。

这里是代码片段的瓶颈:

      c.drawRect(0, 0, c.getWidth(), c.getHeight(), p);
      for(int x = 0; x < sizex; x++)
        for(int y = 0; y < sizey; y++){
          if(tiles[x][y] != 0){
            if(tiles[x][y] > 100)
              tiles[x][y] = 100;
            c.drawRect(rects[x][y], ps[tiles[x][y]]);//This seems to be the bottleneck
          }
        }

所以,从本质上讲,drawRect()是否有另一种更快的方法?

1 个答案:

答案 0 :(得分:1)

要考虑三件事:

  1. 多维数组访问比单维访问慢一点。但我认为这可以忽略不计(Java: Multi-dimensional array vs. One-dimensional

  2. 您可以考虑使用drawRect一次性绘制所有rects的所有行,而不是drawLines。这比对drawLine的多次调用要快。这就是为什么我认为它比多个drawRect更快的原因。但我没有任何证据。

  3. 在画布上绘图 很慢。如果性能很重要,你应该使用表面视图(虽然我不知道它是否适用于LiveWallpapers)。如果性能很重要或者是颗粒和这些高级图形产品,我强烈建议使用OpenGL,或者像libGDX这样的库。