我想要一个可以缩放以适应 Android 中任何屏幕尺寸的背景图像。图像是静态的,不需要滚动。我制作了 4K 分辨率的图像,以涵盖 future 2-3 年内平板电脑上可能存在的分辨率(2560 x 1600 已经存在)。该图像为 JPG,文件大小为 137KB。类似分辨率的图像似乎在 Android 网络浏览器中运行良好。为什么我在 Android 中速度变慢(在 Samsung Galaxy S3 上,它应该有足够的 CPU/RAM 来处理这样的图像)?我不觉得我做了什么不寻常的事。
这会在 XML 布局中加载图像。图像当前存储在drawable-nodpi中。
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_background"
android:scaleType="centerCrop" />
为每个类别的屏幕分辨率制作不同尺寸的图像很困难,因为我无法找到有关每个类别中设备的当前最大分辨率只是最小值的信息。
我想在各种 fragment 之间一次又一次地使用相同的背景图像。有没有办法将图像大小调整为屏幕宽度一次(最好是异步),然后每次加载调整大小的图像? picasso 可以做到这一点吗?
请不要给出“当然较大的图像会导致性能问题”之类的答案,也不要将我链接到 Google 的支持不同密度。这是一个真正的问题,随着屏幕分辨率的不断提高,这个问题将变得更加严重。我很惊讶 ImageView 类中尚未对大图像的处理和调整大小进行优化,这让我觉得我做错了什么。
最佳答案
问题是您尝试做的事情并不依赖于 SDK。通过拥有一张图像并且必须在运行时更改图像,您将导致在 onDraw() 中的 UI 线程上完成更多工作。
当然,您可以创建特定尺寸的位图,但是当您可以依赖 SDK 时为什么要进行如此复杂的工作呢?
目前,您可以使用一堆不同的文件夹来获取所需的内容,将来您可以将 4k 图像放入特定的文件夹中。像这样的事情可能会起作用:
可绘制-xhdpi 可绘制-xxhdpi drawable-xlarge-xhdpi - 对于您想要完成的任务来说可能不够具体 drawable-sw600dp - 这允许您为屏幕宽度大于 600dp 的图像指定一个文件夹。当您将来使用 4k 图像时,此限定符可能会对您的情况有所帮助。
关于android - 高分辨率背景图像在 Android 中带来性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27360383/