慢应用与背景图片问题

31
我正在制作一个安卓小游戏。当游戏在白色背景下运行时,它可以很顺畅地运行,但是当我想要添加一个背景图片时,游戏变得越来越慢。首先我尝试将背景图片作为布局的背景加入,但是速度非常缓慢,动画效果也一帧一帧地出现。然后我决定将背景图片绘制成Canvas上的位图,结果比较之前快了一点,但仍然不能和白色背景相比。
我尝试多次缩放图片,使用更高或更低的分辨率,但结果没有改变,速度仍然很慢。
所以我想问,有没有一种方法能够在安卓应用程序中添加背景图片而不影响应用的流畅性和速度呢?
谢谢。
附言:我正在Sony Tablet S上测试我的应用程序。

1
是的-你只需通过xml添加背景。但是你提到了动画-这是一个动画图片吗?如果它是动画图片,你使用什么代码来显示图片,特别是动画的部分。 - Gabe Sechan
这张图片的尺寸是多少? - Piotr Chojnacki
@PiotrChojnacki 我有不同尺寸的图像,分别是1920x1080和1280x720。 - koraxis
@GabeSechan 这张图片不是动画的,只是普通的 PNG 背景。 - koraxis
@GabeSechan 我最初将它放在布局的android:background中。但是速度太慢了,然后我将其放在自定义视图中,并从中创建了一个位图,然后在onDraw中使用canvas.drawBitmap()。 - koraxis
我几乎可以保证背景不会引起问题。框架将执行与您相同的操作-它将在创建视图时创建位图,然后在onDraw中绘制背景位图,然后再绘制其余部分的视图。 - Gabe Sechan
7个回答

47

如果有人遇到相同的问题,可能会在绘制时再次尝试调整大小,您可以使用no-dpi(drawable-nodpi / drawable-sw600dp-nodpi)文件夹以跳过需要消耗大量CPU和时间的调整大小操作。

此外,其他一些情况可能导致这种问题,我猜您忘记回收旧位图了。


4
解决了!drawable-nodpi文件夹。谢谢! - Kevin Van Ryckegem
很棒。也许不是最干净的解决方案,但短期内可以使用。 - Zuop
救命稻草!这个小改变为我的应用带来了巨大的不同。 - Theo Bendixson
你救了我的命,兄弟。我花了一个多小时来解决这个问题。谢谢。 - Khofidin Ofid

14

最近我也遇到了同样的问题,但没有一个答案能够帮助我。在花费了很多小时调试代码后,我找到了一个很棒的解决方案。你需要做的是将你的背景图像复制到所有的drawable文件夹中(drawable-hdpi、drawable-xhdpi等),就这样。我的背景图像是大小为590kb的png格式。请注意图片大小,因为文件越大,应用程序就越慢。 希望这对某些人有所帮助。:-)


当我使用Xamarin Forms针对Android进行视图转换时,遇到了动画问题。首先,所有我的图片都只在resources/drawable上。一旦我将它们复制到不同的drawable文件夹中,视图转换就可以顺利进行。提示:为每个dpi使用正确尺寸的图片。 - Joao de Araujo

4
你注意到卡顿的主要原因是因为需要将背景图片复制到所有的drawable文件夹中(drawable-hdpi,drawable-xhdpi等)。我使用名为Android Drawable Importer的Android Studio插件来自动化此过程。非常好用。

1

enter image description here

我和你的处境一样。我的应用程序非常简单,但是在添加一些背景时会出现延迟。尝试使用这个应用程序 9-patch-resizer - Transform the image dimensions for all screens
然后出现了这个工具,它可以将xhdpi PNG文件或9.png文件转换为自动生成的ldpi、mdpi和hdpi png文件。
当它转换图像时,将每个文件移动到其自己的项目文件夹(resources/mipmap-hdpi,mipmap-xhdpi...等)。

1

为了更好的性能,请使用平铺背景。您可以在这里找到详细的解释。


0

背景图片分辨率以保持平滑度

DPI 像素尺寸
xxxhdpi 1280x1920
xxhdpi 960x1600
xhdpi 640x960
hdpi 480x800
mdpi 320x480
ldpi 240x320

你需要使用与上述分辨率匹配的背景图片,以避免卡顿或减慢速度。

如果您使用超过上述限制的高分辨率图像,实际上会引起此问题,并且建议仅使用png格式。


-1
我也遇到了同样的问题,我有一个非常简单的应用程序,当我在白色背景上运行它时,它完全正常。但是当我添加背景图像时,它会出现延迟,但经过一些调整,我已经找出如何平稳地运行带有背景图像的应用程序。您只需要调整背景图像的大小,并降低图像的质量,这是因为图像的大小与应用程序的性能成正比。因此,唯一的解决方案是调整大小并降低图像的质量。 我希望我的答案对您有所帮助。

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