安卓画布--绘制矩形或者一个矩形图片

3
如果您总是需要绘制相同的矩形,使用静态位图或canvas.drawRect()更快?
对于此示例,有四个分层矩形。因此,边框具有填充颜色,并且还有一个位于中间颜色和填充颜色之间的边框。
因此,需要四个paint.setColor()命令和四个canvas.drawRect命令,或者只需一个canvas.drawBitmap()命令。

如果你要计时,请在不使用paint.setColor()的情况下进行计时;在绘制过程中不应该更改你的画笔,你应该有四个画笔。对于每个矩形使用一个画笔。或者如果你绘制相同的颜色,则可以重复使用它们。 - Tatarize
2个回答

3

我强烈推荐使用drawRect()

位图占用大量内存,如果不正确使用可能会导致OutOfMemory异常。

由Android编写:

位图占用大量内存,特别是对于像照片这样的丰富图像。例如,Galaxy Nexus相机拍摄的照片最高可达2592x1936像素(500万像素)。如果所使用的位图配置是ARGB_8888(自Android 2.3起默认值),则将此图像加载到内存中需要约19MB的内存(2592*1936*4字节),立即耗尽某些设备上的每个应用程序限制

为避免头痛和意外崩溃,请使用drawRect()

如果您经常针对不同的对象执行这4个绘制操作,请考虑编写一个可为您完成所有4个操作的方法。这样您就不会造成大量重复。

例如:

public void DrawMyRect(Canvas canvas, int x, int y)
{
   canvas.drawRect(x, y ,x + 15, y + 40, paint);
   // Draw its line etc etc..
 }

如果您选择绘制位图,它确实具有优势:

请参阅Android提供的这个链接,了解如何正确使用位图


这个怎么样:https://dev59.com/N1bTa4cB1Zd3GeqP8Cm9 我得到了不同的回复。而我的图片足够小,不应该出现内存错误。现在我只关心性能。将有六个32x32的图像。 - Nathan Tornquist
添加到我的答案。如果你使用的是小图片,实际上不应该有问题。两者都不会有明显的性能提升。我这里有一个应用程序,在不到一秒钟内绘制了数百条线条/形状等。如果你只使用少量形状,我不认为会有任何性能问题。如果你使用位图,我还是建议你点击链接,确保你有效地进行操作。 - IAmGroot
@NathanTornquist。更不用说,位图的大小是固定的,因此如果您调整大小,它可能会看起来更糟。 DrawRect 清晰明了,并且可以轻松更改而不会损失外观,以适应您的形状/需求。 - IAmGroot
位图不会受到任何影响。所有内容都是直接绘制而没有缩放。 - Nathan Tornquist
@NathanTornquist 那就任选一种吧。你需要的规模不会导致性能损失或内存溢出。如果你要处理300x300像素的图像,那么它们会耗尽你的内存。但是现在情况并非如此。因此,这两种方法都没有真正的缺点。但是也没有真正的优势,除了你所说的代码行数更少。 :) - IAmGroot

0

性能差异可能是微不足道的。位图将使用更多内存,画布绘制调用将稍微使用更多CPU。如果您想减少调用而没有位图的开销,可以使用ShapeDrawable


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接