【发布时间】:2014-09-14 03:27:05
【问题描述】:
我目前正在制作 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() 更快的替代方法?
【问题讨论】:
-
您可能需要显示代码中有问题的部分,以便任何人确定如何优化它。
标签: android performance