gpt4 book ai didi

java - Android XML 位图和 OutOfMemoryError

转载 作者:行者123 更新时间:2023-12-01 13:48:38 25 4
gpt4 key购买 nike

我最近在我正在开发的 Android 应用程序中遇到了一些 OutOfMemory 错误,主要是因为我以原始大小加载图像(现在我知道这是一个坏主意)。

我现在正在努力实现根据实际 ImageView 大小加载图像缩小版本的方法,并按照 Google 开发人员指南中的建议缓存它们。

该指南很好地说明了我应该如何处理和处理运行时在 Java 代码中加载的图像,但它忽略了如何在布局文件中使用通过 XML 定义的图像。例如,如果我有一个带有预定义图像的 ImageView,则 XML 代码将如下所示:

 <ImageView
android:id="@+id/my_image_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_image"
/>

如果我现在想在运行时替换该图像,我会检查 ImageView 的宽度和高度,并根据这些尺寸加载新图像:

imageView.setImageBitmap(decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight)

显然,对于通过 XML 定义的图像,这还没有完成。我是否也必须担心这些图像,或者系统是否会处理它们的缩小尺寸?或者我应该避免通过 XML 声明 imageview 的 src 吗?

提前致谢,丹尼尤

最佳答案

当您从可绘制文件夹中设置图像时,Android 会照顾您。但在这种情况下,你也必须提供帮助:)。例如,如果您只为drawable-mdpi提供图像,并且您确实在hpdi设备中运行应用程序,那么android将放大图像以适合屏幕。但当然,在此之前它会尝试找到该图像的hdpi版本进入drawable-hdpi文件夹。如果您确实将该图像的 hdpi 版本提供到drawable-hdpi 文件夹中,它将无法缩放。

现在,对于您的 OutOfMemoryError 我认为您可能已将图像仅放入可绘制或任何低 dpi 文件夹中,并且尚未将该图像的较大版本放入其他高 dpi 文件夹中。(hdpi/xhdpi/xxhdpi) .

根据文档:

Provide different bitmap drawables for different screen densities: By default, Android scales your bitmap drawables (.png, .jpg, and .gif files) and Nine-Patch drawables (.9.png files) so that they render at the appropriate physical size on each device. For example, if your application provides bitmap drawables only for the baseline, medium screen density (mdpi), then the system scales them up when on a high-density screen, and scales them down when on a low-density screen.

我想您会在以下位置找到更多有用的信息: screens_support

关于java - Android XML 位图和 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20144382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com