我的应用程序以连续循环的方式绘制到 Canvas 上,并在每个循环中重新评估可绘制对象的位置并循环它们以进行动画处理。我的问题是以下两种方法哪种更优越,为什么?我是一个初学者,所以我不知道如何对方法进行基准测试之类的东西,所以如果你可以,或者你已经有了,我将不胜感激。
第一种方法(我正在使用的方法)是将 png 资源分配为可绘制对象的句柄。然后每次我想绘制对象时我都会调用:
Drawable.setBounds(x,y,x,y);
Drawable.draw(canvas);
我的问题是(在构造函数中)将资源解码为 BitMap,然后将其缩放到适当的大小是否会更快。然后在每个循环中通过以下方式绘制资源:
canvas.drawBitmap(DrawableName, 0, 0, null);
我问的原因是我的应用程序消耗了数百个资源,因此更改一些资源不足以区分差异,我想知道在大修之前这样做是否会明显更快代码。无论如何,我需要以某种方式提高性能,因此也欢迎任何其他好的想法。
最佳答案
一般来说,绘制位图比绘制要快,因为如果准备得当,绘制位图只是将内存转储到屏幕上。如果您需要绘制缩放的位图,请使用 createScaledBitmap 将其绘制为一个,而不是创建它然后缩放它。您可以通过以下方式实现此目的:
Bitmap myBitmap = BitmapFactory.decodeFile(myFile.getPath());
myBitmap = myBitmap.createScaledBitmap(myBitmap, width, height, true);
The Android developers documentation on the above function
在运行时计算和绘制图元需要进行计算,并且绘制大量图元时会降低性能,因此请尽可能使用更多位图 - 但要小心进行过早优化 - 如果不需要,则创建大量位图是没有意义的不会带来显着(即显着)的性能提升。
关于java - Draw() 还是 DrawBitmap()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300929/