Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要绘制()或绘制位图()?_Java_Android_Animation_Drawable_Drawbitmap - Fatal编程技术网

Java 要绘制()或绘制位图()?

Java 要绘制()或绘制位图()?,java,android,animation,drawable,drawbitmap,Java,Android,Animation,Drawable,Drawbitmap,我的应用程序以连续循环的方式绘制画布,并在每个循环上重新计算可绘制对象的位置,并循环它们以设置动画。我的问题是以下两种方法中哪一种更优越,为什么?我是一个初学者,所以我不知道如何对方法进行基准测试之类的东西,所以如果你可以,或者你已经有了,我会很感激你的输入 第一种方法(我正在使用的方法)是为png资源分配一个句柄作为可绘制的。然后每次我想画对象时,我调用: Drawable.setBounds(x,y,x,y); Drawable.draw(canvas); 我的问题是(在构造函数中),将资

我的应用程序以连续循环的方式绘制画布,并在每个循环上重新计算可绘制对象的位置,并循环它们以设置动画。我的问题是以下两种方法中哪一种更优越,为什么?我是一个初学者,所以我不知道如何对方法进行基准测试之类的东西,所以如果你可以,或者你已经有了,我会很感激你的输入

第一种方法(我正在使用的方法)是为png资源分配一个句柄作为可绘制的。然后每次我想画对象时,我调用:

Drawable.setBounds(x,y,x,y);
Drawable.draw(canvas);
我的问题是(在构造函数中),将资源解码为位图,然后将其缩放到适当的大小会更快吗。然后在每个循环上通过以下方式绘制资源:

canvas.drawBitmap(DrawableName, 0, 0, null);

我问这个问题的原因是,我的应用程序需要数百个资源,因此更改一些资源并不足以区分两者之间的差异,我想知道这样做是否会明显更快,然后再重新检查代码。不管怎样,我需要以某种方式提高性能,因此任何其他好的想法都是受欢迎的。

一般来说,绘制位图比绘制要快,因为如果准备得当,绘制位图只是将内存转储到屏幕上。如果需要绘制缩放位图,请使用
createScaledBitmap
将其绘制为一个位图,而不是先创建位图,然后进行缩放。您可以通过以下方式实现此目的:

Bitmap myBitmap = BitmapFactory.decodeFile(myFile.getPath());
myBitmap = myBitmap.createScaledBitmap(myBitmap, width, height, true);


运行时计算和绘制原语需要进行计算,而绘制其中许多原语时会降低性能,因此尽可能多地使用位图-但要小心过早优化-如果不需要,创建大量位图是没有意义的(即,不明显的)性能提高。

使用canvas.drawBitmap可以大大提高性能。看看这个:谢谢你的帮助,谢谢你上面的评论。我想我可能不得不这么做。我创建了一个fps计数器,发现我在某些地方以低于20 fps的速度触底,通过消除主回路中的绘图,fps上升到5000多fps,告诉我在我的应用程序中绘图很重,需要优化。由于物理计算仅在绘制最后一帧后进行,因此我将循环限制为仅在33毫秒后进行下一次迭代。这意味着我已经将动画限制为每秒30帧,不管设备完成绘制序列的速度有多快。。。。。。。这使得每台设备的物理性能保持一致,前提是该设备能够在33毫秒内完成一个循环。如果不是这样,整个游戏只会滞后,直到处理器赶上。我曾考虑添加一个跳帧功能,以帮助在速度较慢的设备上抑制该问题,但这可能通过显著加快绘图速度来避免。