我的应用程序在连续循环中绘制到画布,并在每个循环上重新评估drawable的位置并将它们循环到动画。我的问题是以下哪两种方法更优越,为什么?我是初学者,所以我不知道如何对方法和那种东西进行基准测试,所以如果可以,或者你已经拥有,我会很感激输入。
第一种方法(我正在使用的方法)是将png资源分配给Handle作为Drawable。然后每当我想绘制我称之为的对象时:
Drawable.setBounds(x,y,x,y);
Drawable.draw(canvas);
我的问题是(在构造函数中)将资源解码为BitMap会更快,然后将其缩放到适当的大小。然后在每个循环中通过以下方式绘制资源:
canvas.drawBitmap(DrawableName, 0, 0, null);
我问的原因是我的应用程序吸引了数百种资源,因此更改一些资源并不足以说明差异,而且我想知道在我检修之前这样做是否会明显更快代码。无论如何,我需要以某种方式提高性能,所以任何其他好的想法也是受欢迎的。
答案 0 :(得分:1)
通常,绘制位图比绘图更快,正如正确的准备一样,绘制位图只是将内存转储到屏幕上。如果需要绘制缩放位图,则使用createScaledBitmap
将其绘制为一个,而不是创建它然后缩放它。你可以通过以下方式实现这一目标:
Bitmap myBitmap = BitmapFactory.decodeFile(myFile.getPath());
myBitmap = myBitmap.createScaledBitmap(myBitmap, width, height, true);
The Android developers documentation on the above function
在运行时计算和绘制基元进行计算,并且在绘制其中许多基元时会降低性能,因此请尽可能使用更多位图 - 但要注意过早优化 - 如果没有必要那么创建大量位图是没有意义的不会有显着(即显着)的性能提升。